
코더 컨커 시큐리티 OWASP 상위 10 API 시리즈 - 브로큰 오브젝트 레벨 인증
Las amenazas a la ciberseguridad hoy en día son omnipresentes e implacables. Se ha vuelto tan grave que tratar de mantenerse al día con ellas después de desplegar los programas se ha vuelto casi imposible. Sin embargo, en esta época de DevSecOps, entrega continua y más datos que nunca, las organizaciones astutas están ayudando a sus desarrolladores a convertirse en superestrellas conscientes de la seguridad que ayudan a eliminar las vulnerabilidades comunes antes de que lleguen a la producción. Hemos abordado las vulnerabilidades de la web, además de nuestros 8 principales errores de la Infraestructura como Código, y ahora es el momento de familiarizarse con el próximo gran desafío de la seguridad del software. ¿Está usted preparado?
Esta próxima serie de blogs se centrará en algunos de los peores fallos de seguridad relacionados con las interfaces de programación de aplicaciones (API). Estos son tan malos que han llegado a la lista de las principales vulnerabilidades de las API del Proyecto de Seguridad de Aplicaciones Web Abiertas(OWASP). Dada la importancia de las APIs en las infraestructuras informáticas modernas, se trata de problemas críticos que debes mantener fuera de tus aplicaciones y programas a toda costa.
Un ejemplo perfecto de por qué es esencial utilizar el código para reforzar la seguridad se puede encontrar en un examen de la vulnerabilidad de autorización a nivel de objeto roto. Esto ocurre cuando los programadores no definen explícitamente qué usuarios pueden ver los objetos y los datos, ni proporcionan ninguna forma de verificación para ver, cambiar o hacer otras solicitudes para manipular o acceder a los objetos, permitiéndoles modificar y acceder a los objetos y datos a través de los puntos finales de la API. Un punto final de la API es un punto de contacto, a menudo una URL, que se utiliza para la comunicación entre la propia API y otro sistema. La capacidad de conectividad entre aplicaciones ha elevado algunos de los programas más queridos del mundo, pero conlleva el riesgo de exponer múltiples puntos finales si no son herméticos.
También puede ocurrir cuando los codificadores olvidan o heredan propiedades de las clases padre, sin darse cuenta de que al hacerlo también dejan fuera un proceso de verificación crítico dentro de su código. En general, las comprobaciones de autorización a nivel de objeto deben incluirse para cada función que acceda a una fuente de datos utilizando una entrada del usuario.
¿Crees que ya estás familiarizado con ellos y que puedes encontrar, arreglar y eliminar un error de control de acceso ahora mismo? Juega al reto gamificado:
¿Qué tal te ha ido? Si quieres mejorar tu puntuación, ¡sigue leyendo!
¿Cuáles son algunos ejemplos de vulnerabilidades de autorización a nivel de objeto rotas?
Las vulnerabilidades de control de acceso a nivel de objeto permiten a los atacantes realizar acciones que no deberían estar permitidas. Puede tratarse de una acción que debería estar reservada a los administradores, como el acceso o la visualización de datos sensibles, o la destrucción de registros. En un entorno de alta seguridad, incluso podría significar impedir que cualquier persona vea los registros a menos que esté específicamente autorizada para hacerlo.
Debes tener en cuenta todas las acciones posibles al definir la autorización a nivel de objeto. Por ejemplo, en la API de Java Spring, un punto final con un problema potencial podría tener este aspecto:
public boolean deleteOrder(Long id) {
Order order = orderRepository.getOne(id);
if (order == null) {
log.info("No found order");
return false;
}
User user = order.getUser();
orderRepository.delete(order);
log.info("Delete order for user {}", user.getId());
return true;
El punto final de la API elimina los pedidos por ID, pero no verifica si este pedido ha sido realizado por el usuario que ha iniciado la sesión. Esto supone una oportunidad para que un atacante aproveche esta laguna y elimine los pedidos de otros usuarios.
Para que las restricciones de acceso seguras se apliquen correctamente, el código se vería más bien así:
public boolean deleteOrder(Long id) {
User user = userService.getUserByContext();
boolean orderExist = getUserOrders().stream()
.anyMatch(order -> (order.getId() == id));
if (orderExist) {
orderRepository.deleteById(id);
log.info("Delete order for user {}", user.getId());
return true;
} else {
log.info("No found order");
return false;
Eliminación de las vulnerabilidades de autorización a nivel de objetos rotos
El código de control de acceso no tiene por qué ser excesivamente complicado. En el caso de nuestro ejemplo del entorno de la API de Java Spring, se puede arreglar definiendo estrictamente quién puede acceder a los objetos.
En primer lugar, hay que poner en marcha un proceso de verificación para identificar quién hace la solicitud:
Usuario = userService.getUserByContext();
A continuación, debemos asegurarnos de que el ID del objeto existe y pertenece al usuario que realiza la solicitud:
boolean orderExist = getUserOrders().stream()
.anyMatch(order -> (order.getId() == id));
Y por último, procedemos a eliminar el objeto:
orderRepository.deleteById(id);
Ten en cuenta que debes asegurarte de que el método de autorización en tu código se alinea con las políticas de usuario y los controles de acceso a los datos de tu organización. Como forma de garantizar que su código es totalmente seguro, debe realizar comprobaciones para verificar que los usuarios con diferentes niveles de permiso tienen acceso a los datos que necesitan para realizar su trabajo, pero se les impide ver o cambiar cualquier cosa que debería estar restringida a ellos. Hacerlo podría descubrir vulnerabilidades de control de objetos que se han pasado por alto accidentalmente.
Lo principal que se desprende de estos ejemplos es que primero hay que definir todas las acciones que un usuario podría realizar con un objeto, y luego añadir fuertes controles de acceso directamente al código. Y por último, nunca confíes en las propiedades heredadas de los padres para hacer ese trabajo o delegar esa autoridad en otro lugar. En su lugar, define los permisos y acciones de los usuarios en el código de forma explícita para cada tipo de objeto que necesites proteger.
Consulte las páginas del Secure Code Warrior páginas del blog para obtener más información sobre esta vulnerabilidad y sobre cómo proteger a su organización y a sus clientes de los estragos de otros fallos de seguridad. También puede probar una demostración de la plataforma de formación Secure Code Warrior para mantener todos sus conocimientos de ciberseguridad perfeccionados y actualizados.


일반적으로 사용자의 입력을 사용하여 데이터 소스에 액세스하는 모든 함수에 대해 개체 수준 권한 부여 검사를 포함해야 하며, 이렇게 하지 않으면 큰 위험이 따릅니다.
Matias Madou, Ph.D. es experto en seguridad, investigador y CTO y cofundador de Secure Code Warrior. Matias obtuvo su doctorado en Seguridad de Aplicaciones en la Universidad de Gante, centrándose en soluciones de análisis estático. Más tarde se incorporó a Fortify en EE.UU., donde se dio cuenta de que no bastaba con detectar problemas de código sin ayudar a los desarrolladores a escribir código seguro. Esto le inspiró para desarrollar productos que ayuden a los desarrolladores, alivien la carga de la seguridad y superen las expectativas de los clientes. Cuando no está en su escritorio como parte de Team Awesome, le gusta estar en el escenario presentando en conferencias como RSA Conference, BlackHat y DefCon.

Secure Code Warrior está aquí para ayudar a las organizaciones a proteger el código durante todo el ciclo de vida del desarrollo de software y a crear una cultura que priorice la ciberseguridad. Ya seas administrador de AppSec, desarrollador, CISO o cualquier persona relacionada con la seguridad, podemos ayudarte a reducir los riesgos asociados al código inseguro en tu organización.
Reserva de demostraciónMatias Madou, Ph.D. es experto en seguridad, investigador y CTO y cofundador de Secure Code Warrior. Matias obtuvo su doctorado en Seguridad de Aplicaciones en la Universidad de Gante, centrándose en soluciones de análisis estático. Más tarde se incorporó a Fortify en EE.UU., donde se dio cuenta de que no bastaba con detectar problemas de código sin ayudar a los desarrolladores a escribir código seguro. Esto le inspiró para desarrollar productos que ayuden a los desarrolladores, alivien la carga de la seguridad y superen las expectativas de los clientes. Cuando no está en su escritorio como parte de Team Awesome, le gusta estar en el escenario presentando en conferencias como RSA Conference, BlackHat y DefCon.
Matías es un investigador y desarrollador con más de 15 años de experiencia práctica en seguridad de software. Ha desarrollado soluciones para empresas como Fortify Software y su propia empresa Sensei Security. A lo largo de su carrera, Matías ha dirigido múltiples proyectos de investigación sobre seguridad de aplicaciones que han dado lugar a productos comerciales y cuenta con más de 10 patentes en su haber. Cuando está lejos de su escritorio, Matias ha servido como instructor para la formación de seguridad de aplicaciones avanzadas courses y regularmente habla en conferencias mundiales como la Conferencia RSA, Black Hat, DefCon, BSIMM, OWASP AppSec y BruCon.
Matías es doctor en Ingeniería Informática por la Universidad de Gante, donde estudió la seguridad de las aplicaciones mediante la ofuscación de programas para ocultar el funcionamiento interno de una aplicación.


Las amenazas a la ciberseguridad hoy en día son omnipresentes e implacables. Se ha vuelto tan grave que tratar de mantenerse al día con ellas después de desplegar los programas se ha vuelto casi imposible. Sin embargo, en esta época de DevSecOps, entrega continua y más datos que nunca, las organizaciones astutas están ayudando a sus desarrolladores a convertirse en superestrellas conscientes de la seguridad que ayudan a eliminar las vulnerabilidades comunes antes de que lleguen a la producción. Hemos abordado las vulnerabilidades de la web, además de nuestros 8 principales errores de la Infraestructura como Código, y ahora es el momento de familiarizarse con el próximo gran desafío de la seguridad del software. ¿Está usted preparado?
Esta próxima serie de blogs se centrará en algunos de los peores fallos de seguridad relacionados con las interfaces de programación de aplicaciones (API). Estos son tan malos que han llegado a la lista de las principales vulnerabilidades de las API del Proyecto de Seguridad de Aplicaciones Web Abiertas(OWASP). Dada la importancia de las APIs en las infraestructuras informáticas modernas, se trata de problemas críticos que debes mantener fuera de tus aplicaciones y programas a toda costa.
Un ejemplo perfecto de por qué es esencial utilizar el código para reforzar la seguridad se puede encontrar en un examen de la vulnerabilidad de autorización a nivel de objeto roto. Esto ocurre cuando los programadores no definen explícitamente qué usuarios pueden ver los objetos y los datos, ni proporcionan ninguna forma de verificación para ver, cambiar o hacer otras solicitudes para manipular o acceder a los objetos, permitiéndoles modificar y acceder a los objetos y datos a través de los puntos finales de la API. Un punto final de la API es un punto de contacto, a menudo una URL, que se utiliza para la comunicación entre la propia API y otro sistema. La capacidad de conectividad entre aplicaciones ha elevado algunos de los programas más queridos del mundo, pero conlleva el riesgo de exponer múltiples puntos finales si no son herméticos.
También puede ocurrir cuando los codificadores olvidan o heredan propiedades de las clases padre, sin darse cuenta de que al hacerlo también dejan fuera un proceso de verificación crítico dentro de su código. En general, las comprobaciones de autorización a nivel de objeto deben incluirse para cada función que acceda a una fuente de datos utilizando una entrada del usuario.
¿Crees que ya estás familiarizado con ellos y que puedes encontrar, arreglar y eliminar un error de control de acceso ahora mismo? Juega al reto gamificado:
¿Qué tal te ha ido? Si quieres mejorar tu puntuación, ¡sigue leyendo!
¿Cuáles son algunos ejemplos de vulnerabilidades de autorización a nivel de objeto rotas?
Las vulnerabilidades de control de acceso a nivel de objeto permiten a los atacantes realizar acciones que no deberían estar permitidas. Puede tratarse de una acción que debería estar reservada a los administradores, como el acceso o la visualización de datos sensibles, o la destrucción de registros. En un entorno de alta seguridad, incluso podría significar impedir que cualquier persona vea los registros a menos que esté específicamente autorizada para hacerlo.
Debes tener en cuenta todas las acciones posibles al definir la autorización a nivel de objeto. Por ejemplo, en la API de Java Spring, un punto final con un problema potencial podría tener este aspecto:
public boolean deleteOrder(Long id) {
Order order = orderRepository.getOne(id);
if (order == null) {
log.info("No found order");
return false;
}
User user = order.getUser();
orderRepository.delete(order);
log.info("Delete order for user {}", user.getId());
return true;
El punto final de la API elimina los pedidos por ID, pero no verifica si este pedido ha sido realizado por el usuario que ha iniciado la sesión. Esto supone una oportunidad para que un atacante aproveche esta laguna y elimine los pedidos de otros usuarios.
Para que las restricciones de acceso seguras se apliquen correctamente, el código se vería más bien así:
public boolean deleteOrder(Long id) {
User user = userService.getUserByContext();
boolean orderExist = getUserOrders().stream()
.anyMatch(order -> (order.getId() == id));
if (orderExist) {
orderRepository.deleteById(id);
log.info("Delete order for user {}", user.getId());
return true;
} else {
log.info("No found order");
return false;
Eliminación de las vulnerabilidades de autorización a nivel de objetos rotos
El código de control de acceso no tiene por qué ser excesivamente complicado. En el caso de nuestro ejemplo del entorno de la API de Java Spring, se puede arreglar definiendo estrictamente quién puede acceder a los objetos.
En primer lugar, hay que poner en marcha un proceso de verificación para identificar quién hace la solicitud:
Usuario = userService.getUserByContext();
A continuación, debemos asegurarnos de que el ID del objeto existe y pertenece al usuario que realiza la solicitud:
boolean orderExist = getUserOrders().stream()
.anyMatch(order -> (order.getId() == id));
Y por último, procedemos a eliminar el objeto:
orderRepository.deleteById(id);
Ten en cuenta que debes asegurarte de que el método de autorización en tu código se alinea con las políticas de usuario y los controles de acceso a los datos de tu organización. Como forma de garantizar que su código es totalmente seguro, debe realizar comprobaciones para verificar que los usuarios con diferentes niveles de permiso tienen acceso a los datos que necesitan para realizar su trabajo, pero se les impide ver o cambiar cualquier cosa que debería estar restringida a ellos. Hacerlo podría descubrir vulnerabilidades de control de objetos que se han pasado por alto accidentalmente.
Lo principal que se desprende de estos ejemplos es que primero hay que definir todas las acciones que un usuario podría realizar con un objeto, y luego añadir fuertes controles de acceso directamente al código. Y por último, nunca confíes en las propiedades heredadas de los padres para hacer ese trabajo o delegar esa autoridad en otro lugar. En su lugar, define los permisos y acciones de los usuarios en el código de forma explícita para cada tipo de objeto que necesites proteger.
Consulte las páginas del Secure Code Warrior páginas del blog para obtener más información sobre esta vulnerabilidad y sobre cómo proteger a su organización y a sus clientes de los estragos de otros fallos de seguridad. También puede probar una demostración de la plataforma de formación Secure Code Warrior para mantener todos sus conocimientos de ciberseguridad perfeccionados y actualizados.

Las amenazas a la ciberseguridad hoy en día son omnipresentes e implacables. Se ha vuelto tan grave que tratar de mantenerse al día con ellas después de desplegar los programas se ha vuelto casi imposible. Sin embargo, en esta época de DevSecOps, entrega continua y más datos que nunca, las organizaciones astutas están ayudando a sus desarrolladores a convertirse en superestrellas conscientes de la seguridad que ayudan a eliminar las vulnerabilidades comunes antes de que lleguen a la producción. Hemos abordado las vulnerabilidades de la web, además de nuestros 8 principales errores de la Infraestructura como Código, y ahora es el momento de familiarizarse con el próximo gran desafío de la seguridad del software. ¿Está usted preparado?
Esta próxima serie de blogs se centrará en algunos de los peores fallos de seguridad relacionados con las interfaces de programación de aplicaciones (API). Estos son tan malos que han llegado a la lista de las principales vulnerabilidades de las API del Proyecto de Seguridad de Aplicaciones Web Abiertas(OWASP). Dada la importancia de las APIs en las infraestructuras informáticas modernas, se trata de problemas críticos que debes mantener fuera de tus aplicaciones y programas a toda costa.
Un ejemplo perfecto de por qué es esencial utilizar el código para reforzar la seguridad se puede encontrar en un examen de la vulnerabilidad de autorización a nivel de objeto roto. Esto ocurre cuando los programadores no definen explícitamente qué usuarios pueden ver los objetos y los datos, ni proporcionan ninguna forma de verificación para ver, cambiar o hacer otras solicitudes para manipular o acceder a los objetos, permitiéndoles modificar y acceder a los objetos y datos a través de los puntos finales de la API. Un punto final de la API es un punto de contacto, a menudo una URL, que se utiliza para la comunicación entre la propia API y otro sistema. La capacidad de conectividad entre aplicaciones ha elevado algunos de los programas más queridos del mundo, pero conlleva el riesgo de exponer múltiples puntos finales si no son herméticos.
También puede ocurrir cuando los codificadores olvidan o heredan propiedades de las clases padre, sin darse cuenta de que al hacerlo también dejan fuera un proceso de verificación crítico dentro de su código. En general, las comprobaciones de autorización a nivel de objeto deben incluirse para cada función que acceda a una fuente de datos utilizando una entrada del usuario.
¿Crees que ya estás familiarizado con ellos y que puedes encontrar, arreglar y eliminar un error de control de acceso ahora mismo? Juega al reto gamificado:
¿Qué tal te ha ido? Si quieres mejorar tu puntuación, ¡sigue leyendo!
¿Cuáles son algunos ejemplos de vulnerabilidades de autorización a nivel de objeto rotas?
Las vulnerabilidades de control de acceso a nivel de objeto permiten a los atacantes realizar acciones que no deberían estar permitidas. Puede tratarse de una acción que debería estar reservada a los administradores, como el acceso o la visualización de datos sensibles, o la destrucción de registros. En un entorno de alta seguridad, incluso podría significar impedir que cualquier persona vea los registros a menos que esté específicamente autorizada para hacerlo.
Debes tener en cuenta todas las acciones posibles al definir la autorización a nivel de objeto. Por ejemplo, en la API de Java Spring, un punto final con un problema potencial podría tener este aspecto:
public boolean deleteOrder(Long id) {
Order order = orderRepository.getOne(id);
if (order == null) {
log.info("No found order");
return false;
}
User user = order.getUser();
orderRepository.delete(order);
log.info("Delete order for user {}", user.getId());
return true;
El punto final de la API elimina los pedidos por ID, pero no verifica si este pedido ha sido realizado por el usuario que ha iniciado la sesión. Esto supone una oportunidad para que un atacante aproveche esta laguna y elimine los pedidos de otros usuarios.
Para que las restricciones de acceso seguras se apliquen correctamente, el código se vería más bien así:
public boolean deleteOrder(Long id) {
User user = userService.getUserByContext();
boolean orderExist = getUserOrders().stream()
.anyMatch(order -> (order.getId() == id));
if (orderExist) {
orderRepository.deleteById(id);
log.info("Delete order for user {}", user.getId());
return true;
} else {
log.info("No found order");
return false;
Eliminación de las vulnerabilidades de autorización a nivel de objetos rotos
El código de control de acceso no tiene por qué ser excesivamente complicado. En el caso de nuestro ejemplo del entorno de la API de Java Spring, se puede arreglar definiendo estrictamente quién puede acceder a los objetos.
En primer lugar, hay que poner en marcha un proceso de verificación para identificar quién hace la solicitud:
Usuario = userService.getUserByContext();
A continuación, debemos asegurarnos de que el ID del objeto existe y pertenece al usuario que realiza la solicitud:
boolean orderExist = getUserOrders().stream()
.anyMatch(order -> (order.getId() == id));
Y por último, procedemos a eliminar el objeto:
orderRepository.deleteById(id);
Ten en cuenta que debes asegurarte de que el método de autorización en tu código se alinea con las políticas de usuario y los controles de acceso a los datos de tu organización. Como forma de garantizar que su código es totalmente seguro, debe realizar comprobaciones para verificar que los usuarios con diferentes niveles de permiso tienen acceso a los datos que necesitan para realizar su trabajo, pero se les impide ver o cambiar cualquier cosa que debería estar restringida a ellos. Hacerlo podría descubrir vulnerabilidades de control de objetos que se han pasado por alto accidentalmente.
Lo principal que se desprende de estos ejemplos es que primero hay que definir todas las acciones que un usuario podría realizar con un objeto, y luego añadir fuertes controles de acceso directamente al código. Y por último, nunca confíes en las propiedades heredadas de los padres para hacer ese trabajo o delegar esa autoridad en otro lugar. En su lugar, define los permisos y acciones de los usuarios en el código de forma explícita para cada tipo de objeto que necesites proteger.
Consulte las páginas del Secure Code Warrior páginas del blog para obtener más información sobre esta vulnerabilidad y sobre cómo proteger a su organización y a sus clientes de los estragos de otros fallos de seguridad. También puede probar una demostración de la plataforma de formación Secure Code Warrior para mantener todos sus conocimientos de ciberseguridad perfeccionados y actualizados.

Haga clic en el siguiente enlace y descargue el PDF de este recurso.
Secure Code Warrior está aquí para ayudar a las organizaciones a proteger el código durante todo el ciclo de vida del desarrollo de software y a crear una cultura que priorice la ciberseguridad. Ya seas administrador de AppSec, desarrollador, CISO o cualquier persona relacionada con la seguridad, podemos ayudarte a reducir los riesgos asociados al código inseguro en tu organización.
Ver informeReserva de demostraciónMatias Madou, Ph.D. es experto en seguridad, investigador y CTO y cofundador de Secure Code Warrior. Matias obtuvo su doctorado en Seguridad de Aplicaciones en la Universidad de Gante, centrándose en soluciones de análisis estático. Más tarde se incorporó a Fortify en EE.UU., donde se dio cuenta de que no bastaba con detectar problemas de código sin ayudar a los desarrolladores a escribir código seguro. Esto le inspiró para desarrollar productos que ayuden a los desarrolladores, alivien la carga de la seguridad y superen las expectativas de los clientes. Cuando no está en su escritorio como parte de Team Awesome, le gusta estar en el escenario presentando en conferencias como RSA Conference, BlackHat y DefCon.
Matías es un investigador y desarrollador con más de 15 años de experiencia práctica en seguridad de software. Ha desarrollado soluciones para empresas como Fortify Software y su propia empresa Sensei Security. A lo largo de su carrera, Matías ha dirigido múltiples proyectos de investigación sobre seguridad de aplicaciones que han dado lugar a productos comerciales y cuenta con más de 10 patentes en su haber. Cuando está lejos de su escritorio, Matias ha servido como instructor para la formación de seguridad de aplicaciones avanzadas courses y regularmente habla en conferencias mundiales como la Conferencia RSA, Black Hat, DefCon, BSIMM, OWASP AppSec y BruCon.
Matías es doctor en Ingeniería Informática por la Universidad de Gante, donde estudió la seguridad de las aplicaciones mediante la ofuscación de programas para ocultar el funcionamiento interno de una aplicación.
Las amenazas a la ciberseguridad hoy en día son omnipresentes e implacables. Se ha vuelto tan grave que tratar de mantenerse al día con ellas después de desplegar los programas se ha vuelto casi imposible. Sin embargo, en esta época de DevSecOps, entrega continua y más datos que nunca, las organizaciones astutas están ayudando a sus desarrolladores a convertirse en superestrellas conscientes de la seguridad que ayudan a eliminar las vulnerabilidades comunes antes de que lleguen a la producción. Hemos abordado las vulnerabilidades de la web, además de nuestros 8 principales errores de la Infraestructura como Código, y ahora es el momento de familiarizarse con el próximo gran desafío de la seguridad del software. ¿Está usted preparado?
Esta próxima serie de blogs se centrará en algunos de los peores fallos de seguridad relacionados con las interfaces de programación de aplicaciones (API). Estos son tan malos que han llegado a la lista de las principales vulnerabilidades de las API del Proyecto de Seguridad de Aplicaciones Web Abiertas(OWASP). Dada la importancia de las APIs en las infraestructuras informáticas modernas, se trata de problemas críticos que debes mantener fuera de tus aplicaciones y programas a toda costa.
Un ejemplo perfecto de por qué es esencial utilizar el código para reforzar la seguridad se puede encontrar en un examen de la vulnerabilidad de autorización a nivel de objeto roto. Esto ocurre cuando los programadores no definen explícitamente qué usuarios pueden ver los objetos y los datos, ni proporcionan ninguna forma de verificación para ver, cambiar o hacer otras solicitudes para manipular o acceder a los objetos, permitiéndoles modificar y acceder a los objetos y datos a través de los puntos finales de la API. Un punto final de la API es un punto de contacto, a menudo una URL, que se utiliza para la comunicación entre la propia API y otro sistema. La capacidad de conectividad entre aplicaciones ha elevado algunos de los programas más queridos del mundo, pero conlleva el riesgo de exponer múltiples puntos finales si no son herméticos.
También puede ocurrir cuando los codificadores olvidan o heredan propiedades de las clases padre, sin darse cuenta de que al hacerlo también dejan fuera un proceso de verificación crítico dentro de su código. En general, las comprobaciones de autorización a nivel de objeto deben incluirse para cada función que acceda a una fuente de datos utilizando una entrada del usuario.
¿Crees que ya estás familiarizado con ellos y que puedes encontrar, arreglar y eliminar un error de control de acceso ahora mismo? Juega al reto gamificado:
¿Qué tal te ha ido? Si quieres mejorar tu puntuación, ¡sigue leyendo!
¿Cuáles son algunos ejemplos de vulnerabilidades de autorización a nivel de objeto rotas?
Las vulnerabilidades de control de acceso a nivel de objeto permiten a los atacantes realizar acciones que no deberían estar permitidas. Puede tratarse de una acción que debería estar reservada a los administradores, como el acceso o la visualización de datos sensibles, o la destrucción de registros. En un entorno de alta seguridad, incluso podría significar impedir que cualquier persona vea los registros a menos que esté específicamente autorizada para hacerlo.
Debes tener en cuenta todas las acciones posibles al definir la autorización a nivel de objeto. Por ejemplo, en la API de Java Spring, un punto final con un problema potencial podría tener este aspecto:
public boolean deleteOrder(Long id) {
Order order = orderRepository.getOne(id);
if (order == null) {
log.info("No found order");
return false;
}
User user = order.getUser();
orderRepository.delete(order);
log.info("Delete order for user {}", user.getId());
return true;
El punto final de la API elimina los pedidos por ID, pero no verifica si este pedido ha sido realizado por el usuario que ha iniciado la sesión. Esto supone una oportunidad para que un atacante aproveche esta laguna y elimine los pedidos de otros usuarios.
Para que las restricciones de acceso seguras se apliquen correctamente, el código se vería más bien así:
public boolean deleteOrder(Long id) {
User user = userService.getUserByContext();
boolean orderExist = getUserOrders().stream()
.anyMatch(order -> (order.getId() == id));
if (orderExist) {
orderRepository.deleteById(id);
log.info("Delete order for user {}", user.getId());
return true;
} else {
log.info("No found order");
return false;
Eliminación de las vulnerabilidades de autorización a nivel de objetos rotos
El código de control de acceso no tiene por qué ser excesivamente complicado. En el caso de nuestro ejemplo del entorno de la API de Java Spring, se puede arreglar definiendo estrictamente quién puede acceder a los objetos.
En primer lugar, hay que poner en marcha un proceso de verificación para identificar quién hace la solicitud:
Usuario = userService.getUserByContext();
A continuación, debemos asegurarnos de que el ID del objeto existe y pertenece al usuario que realiza la solicitud:
boolean orderExist = getUserOrders().stream()
.anyMatch(order -> (order.getId() == id));
Y por último, procedemos a eliminar el objeto:
orderRepository.deleteById(id);
Ten en cuenta que debes asegurarte de que el método de autorización en tu código se alinea con las políticas de usuario y los controles de acceso a los datos de tu organización. Como forma de garantizar que su código es totalmente seguro, debe realizar comprobaciones para verificar que los usuarios con diferentes niveles de permiso tienen acceso a los datos que necesitan para realizar su trabajo, pero se les impide ver o cambiar cualquier cosa que debería estar restringida a ellos. Hacerlo podría descubrir vulnerabilidades de control de objetos que se han pasado por alto accidentalmente.
Lo principal que se desprende de estos ejemplos es que primero hay que definir todas las acciones que un usuario podría realizar con un objeto, y luego añadir fuertes controles de acceso directamente al código. Y por último, nunca confíes en las propiedades heredadas de los padres para hacer ese trabajo o delegar esa autoridad en otro lugar. En su lugar, define los permisos y acciones de los usuarios en el código de forma explícita para cada tipo de objeto que necesites proteger.
Consulte las páginas del Secure Code Warrior páginas del blog para obtener más información sobre esta vulnerabilidad y sobre cómo proteger a su organización y a sus clientes de los estragos de otros fallos de seguridad. También puede probar una demostración de la plataforma de formación Secure Code Warrior para mantener todos sus conocimientos de ciberseguridad perfeccionados y actualizados.
Índice
Matias Madou, Ph.D. es experto en seguridad, investigador y CTO y cofundador de Secure Code Warrior. Matias obtuvo su doctorado en Seguridad de Aplicaciones en la Universidad de Gante, centrándose en soluciones de análisis estático. Más tarde se incorporó a Fortify en EE.UU., donde se dio cuenta de que no bastaba con detectar problemas de código sin ayudar a los desarrolladores a escribir código seguro. Esto le inspiró para desarrollar productos que ayuden a los desarrolladores, alivien la carga de la seguridad y superen las expectativas de los clientes. Cuando no está en su escritorio como parte de Team Awesome, le gusta estar en el escenario presentando en conferencias como RSA Conference, BlackHat y DefCon.

Secure Code Warrior está aquí para ayudar a las organizaciones a proteger el código durante todo el ciclo de vida del desarrollo de software y a crear una cultura que priorice la ciberseguridad. Ya seas administrador de AppSec, desarrollador, CISO o cualquier persona relacionada con la seguridad, podemos ayudarte a reducir los riesgos asociados al código inseguro en tu organización.
Reserva de demostraciónDescargarRecursos útiles para empezar
Temas y contenidos de la formación sobre códigos de seguridad
El mejor contenido del sector evoluciona constantemente para adaptarse al entorno de desarrollo de software en constante cambio, teniendo en cuenta el papel de los clientes. Se ofrecen temas que abarcan desde la inteligencia artificial hasta la inyección de XQuery, para diversas funciones, desde arquitectos e ingenieros hasta gestores de productos y control de calidad. Eche un vistazo al contenido que ofrece el catálogo por temas y funciones.
La Cámara de Comercio establece el estándar para la seguridad impulsada por desarrolladores a gran escala
Kamer van Koophandel comparte cómo ha integrado la codificación segura en el desarrollo diario mediante certificaciones basadas en roles, evaluaciones comparativas de Trust Score y una cultura de responsabilidad compartida en materia de seguridad.
Modelado de amenazas con IA: convertir a cada desarrollador en un modelador de amenazas
Saldrá mejor equipado para ayudar a los desarrolladores a combinar ideas y técnicas de modelado de amenazas con las herramientas de IA que ya utilizan para reforzar la seguridad, mejorar la colaboración y crear software más resistente desde el principio.
Recursos útiles para empezar
Cybermon ha vuelto: la misión de IA para derrotar al jefe ahora está disponible bajo demanda.
Cybermon 2025 Bit the Boss ya está disponible en SCW durante todo el año. Implemente tareas de seguridad avanzadas de IA/LLM para impulsar el desarrollo de IA de seguridad a gran escala.
Explicación de la Ley de Resiliencia Cibernética: El significado del diseño de seguridad en el desarrollo de software
Descubra los requisitos y el ámbito de aplicación de la Ley de Resiliencia Cibernética (CRA) de la UE, y cómo el equipo de ingeniería puede prepararse de forma segura mediante el diseño, las prácticas, la prevención de vulnerabilidades y la creación de un entorno de desarrollo.
Factor de éxito 1: Criterios de éxito definidos y medibles
El habilitador 1 ofrece una serie de 10 partes sobre los habilitadores del éxito, mostrando cómo la codificación segura puede mejorar los resultados empresariales, como la reducción de riesgos y costes y la aceleración de la madurez de los programas a largo plazo.




%20(1).avif)
.avif)
