
코드 시리즈로 보안 인프라를 정복한 코더: 기능 수준 액세스 제어 누락
Ha llegado el momento de la siguiente entrega de nuestra serie Infrastructure as Code, los blogs que llevarán a los desarrolladores como usted a un nivel completamente nuevo de conciencia de la seguridad a la hora de desplegar una infraestructura segura dentro de su propia organización.
Ah, por cierto... ¿cómo te fue con el reto de la desconfiguración de seguridad en el blog anterior? Si quieres seguir adelante y abordar una vulnerabilidad de control de acceso de nivel funcional que falta ahora mismo, dirígete a la plataforma:
(El enlace anterior le llevará al desafío de Kubernetes, pero una vez que esté en la plataforma, utilice el menú desplegable para elegir también entre Ansible, CloudFormation, Terraform o Docker. Tú eliges).
Casi todas las aplicaciones desplegadas hoy en día tienen algún tipo de mecanismo de control de acceso que comprueba si un usuario tiene o no permiso para realizar las funciones solicitadas. Es prácticamente la piedra angular de una buena seguridad, además de la funcionalidad, cuando se crea una aplicación. De hecho, todas las aplicaciones web necesitan controles de acceso para que usuarios con diferentes privilegios puedan utilizar el programa.
Sin embargo, pueden surgir problemas cuando esas mismas funciones de verificación para el control de acceso no se realizan a nivel de la infraestructura, o están mal configuradas. Sin un control de acceso a nivel de infraestructura en perfecto orden, se abre toda una empresa a los piratas informáticos, que pueden utilizar esa vulnerabilidad como su puerta de entrada para el fisgoneo no autorizado o un ataque completo.
De hecho, explotar las vulnerabilidades de control de acceso a funciones ausentes o mal configuradas es extremadamente fácil. Los atacantes ni siquiera necesitan ser demasiado hábiles. Sólo necesitan saber qué comandos ejecutan funciones dentro de cualquier marco que soporte la aplicación. Si lo saben, es sólo una cuestión de prueba y error. Pueden enviar continuamente peticiones que no deberían estar permitidas, y en cuanto una de ellas tenga éxito, el sitio web, la aplicación, el servidor o incluso toda la red en cuestión podrían quedar expuestos.
¿Cómo funcionan los exploits de control de acceso a nivel de funciones faltantes?
Hay algunas formas en las que los controles de acceso a nivel de función pueden colarse en una organización. Por ejemplo, el acceso a nivel de función puede dejarse en manos de una aplicación y no ser verificado por la infraestructura subyacente. O bien, el control de acceso a nivel de infraestructura puede estar mal configurado. En algunos casos, los administradores asumen que los usuarios no autorizados no sabrán cómo llegar a los recursos de la infraestructura que sólo los usuarios de nivel superior deberían poder ver y utilizan un modelo de "seguridad por oscuridad" que rara vez funciona.
Para un ejemplo de seguridad por oscuridad, la siguiente URL es probablemente vulnerable a un ataque:
http://companywebsite.com/app/NormalUserHomepage
Si un usuario autentificado emplea una técnica llamada Forced URL Browsing, podría intentar llegar a una página que sólo se muestra a los administradores. Un ejemplo podría ser:
http://companywebsite.com/app/AdminPages
Si no existe una verificación del lado del servidor, simplemente se les mostrará la página de administración (si su nombre coincide con la solicitud) y entonces tendrán acceso a cualquier función adicional que los administradores hagan desde la nueva página. Si el servidor devuelve un error de "página no encontrada" al atacante, éste puede simplemente seguir intentándolo hasta que descubra el nombre de la página de administración.
Para los atacantes, explotar la falta de controles de acceso a nivel de función es un proceso similar. En lugar de intentar navegar por páginas no autorizadas, envían solicitudes de funciones. Por ejemplo, podrían intentar crear un nuevo usuario con derechos de administrador. Así que su solicitud sería algo así, dependiendo del marco de trabajo:
POST/action/createuser name=hacker&pw=password&role=admin
Si no existe un control de acceso a nivel de función, entonces el ejemplo anterior tendría éxito y se crearía una nueva cuenta de administrador. Una vez que el atacante vuelva a iniciar sesión como el nuevo administrador, tendría el mismo acceso y permisos que cualquier otro administrador en esa red o servidor.
La solución a la falta de controles de acceso a nivel de función
Debido a que es tan fácil para los atacantes explotar las vulnerabilidades de control de acceso a nivel de funciones faltantes, es crítico que se encuentren, se arreglen y se prevengan. Afortunadamente, esto no es excesivamente difícil con algunos conocimientos y una formación básica en seguridad de la Infraestructura como Código.
La principal protección vendrá de la implementación de la autorización basada en roles a nivel de infraestructura. Nunca confíes en que las aplicaciones se encarguen de esa función. Incluso si lo hacen, tener una autorización del lado de la infraestructura garantizará que no se pierda nada. Lo ideal es que la autorización provenga de un lugar centralizado (por ejemplo, AWS IAM, Azure IAM, etc.) que se incorpore a la rutina de su organización y se aplique a cada nueva aplicación. Estos procesos de autorización pueden provenir del propio framework o de cualquier número de módulos externos fáciles de usar.
Por último, su organización debería adoptar el concepto de mínimo privilegio. Todas las acciones y funciones deben ser denegadas por defecto, y el proceso de autorización debe utilizarse para dar a los usuarios válidos permiso para hacer lo que necesiten. Sólo se les debe dar el permiso suficiente para realizar la función requerida, y sólo durante el tiempo necesario.
La falta de controles de acceso a nivel de función puede ser devastadora. Pero, afortunadamente, si incorpora a su organización buenas prácticas de autorización a nivel de infraestructura, puede evitar fácilmente que este problema se produzca.
¿Crees que estás preparado para detectar un error de control de acceso en la naturaleza? Compara estos fragmentos de código de Docker; uno vulnerable y otro seguro:
Vulnerable:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER root
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
Seguro:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER nobody
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
Aprende más, desafíate a ti mismo
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 y vulnerabilidades de seguridad.
Y si te lo perdiste antes, puedes probar un reto de seguridad gamificado de IaC en la plataforma Secure Code Warrior para mantener todos tus conocimientos de ciberseguridad perfeccionados y actualizados.
Estén atentos al próximo capítulo.


인프라 수준의 액세스 제어를 완벽하게 갖추지 못하면 기업 전체가 공격자에게 노출될 수 있으며, 공격자는 해당 취약점을 무단 스누핑이나 전체 공격의 게이트웨이로 사용할 수 있습니다.
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.


Ha llegado el momento de la siguiente entrega de nuestra serie Infrastructure as Code, los blogs que llevarán a los desarrolladores como usted a un nivel completamente nuevo de conciencia de la seguridad a la hora de desplegar una infraestructura segura dentro de su propia organización.
Ah, por cierto... ¿cómo te fue con el reto de la desconfiguración de seguridad en el blog anterior? Si quieres seguir adelante y abordar una vulnerabilidad de control de acceso de nivel funcional que falta ahora mismo, dirígete a la plataforma:
(El enlace anterior le llevará al desafío de Kubernetes, pero una vez que esté en la plataforma, utilice el menú desplegable para elegir también entre Ansible, CloudFormation, Terraform o Docker. Tú eliges).
Casi todas las aplicaciones desplegadas hoy en día tienen algún tipo de mecanismo de control de acceso que comprueba si un usuario tiene o no permiso para realizar las funciones solicitadas. Es prácticamente la piedra angular de una buena seguridad, además de la funcionalidad, cuando se crea una aplicación. De hecho, todas las aplicaciones web necesitan controles de acceso para que usuarios con diferentes privilegios puedan utilizar el programa.
Sin embargo, pueden surgir problemas cuando esas mismas funciones de verificación para el control de acceso no se realizan a nivel de la infraestructura, o están mal configuradas. Sin un control de acceso a nivel de infraestructura en perfecto orden, se abre toda una empresa a los piratas informáticos, que pueden utilizar esa vulnerabilidad como su puerta de entrada para el fisgoneo no autorizado o un ataque completo.
De hecho, explotar las vulnerabilidades de control de acceso a funciones ausentes o mal configuradas es extremadamente fácil. Los atacantes ni siquiera necesitan ser demasiado hábiles. Sólo necesitan saber qué comandos ejecutan funciones dentro de cualquier marco que soporte la aplicación. Si lo saben, es sólo una cuestión de prueba y error. Pueden enviar continuamente peticiones que no deberían estar permitidas, y en cuanto una de ellas tenga éxito, el sitio web, la aplicación, el servidor o incluso toda la red en cuestión podrían quedar expuestos.
¿Cómo funcionan los exploits de control de acceso a nivel de funciones faltantes?
Hay algunas formas en las que los controles de acceso a nivel de función pueden colarse en una organización. Por ejemplo, el acceso a nivel de función puede dejarse en manos de una aplicación y no ser verificado por la infraestructura subyacente. O bien, el control de acceso a nivel de infraestructura puede estar mal configurado. En algunos casos, los administradores asumen que los usuarios no autorizados no sabrán cómo llegar a los recursos de la infraestructura que sólo los usuarios de nivel superior deberían poder ver y utilizan un modelo de "seguridad por oscuridad" que rara vez funciona.
Para un ejemplo de seguridad por oscuridad, la siguiente URL es probablemente vulnerable a un ataque:
http://companywebsite.com/app/NormalUserHomepage
Si un usuario autentificado emplea una técnica llamada Forced URL Browsing, podría intentar llegar a una página que sólo se muestra a los administradores. Un ejemplo podría ser:
http://companywebsite.com/app/AdminPages
Si no existe una verificación del lado del servidor, simplemente se les mostrará la página de administración (si su nombre coincide con la solicitud) y entonces tendrán acceso a cualquier función adicional que los administradores hagan desde la nueva página. Si el servidor devuelve un error de "página no encontrada" al atacante, éste puede simplemente seguir intentándolo hasta que descubra el nombre de la página de administración.
Para los atacantes, explotar la falta de controles de acceso a nivel de función es un proceso similar. En lugar de intentar navegar por páginas no autorizadas, envían solicitudes de funciones. Por ejemplo, podrían intentar crear un nuevo usuario con derechos de administrador. Así que su solicitud sería algo así, dependiendo del marco de trabajo:
POST/action/createuser name=hacker&pw=password&role=admin
Si no existe un control de acceso a nivel de función, entonces el ejemplo anterior tendría éxito y se crearía una nueva cuenta de administrador. Una vez que el atacante vuelva a iniciar sesión como el nuevo administrador, tendría el mismo acceso y permisos que cualquier otro administrador en esa red o servidor.
La solución a la falta de controles de acceso a nivel de función
Debido a que es tan fácil para los atacantes explotar las vulnerabilidades de control de acceso a nivel de funciones faltantes, es crítico que se encuentren, se arreglen y se prevengan. Afortunadamente, esto no es excesivamente difícil con algunos conocimientos y una formación básica en seguridad de la Infraestructura como Código.
La principal protección vendrá de la implementación de la autorización basada en roles a nivel de infraestructura. Nunca confíes en que las aplicaciones se encarguen de esa función. Incluso si lo hacen, tener una autorización del lado de la infraestructura garantizará que no se pierda nada. Lo ideal es que la autorización provenga de un lugar centralizado (por ejemplo, AWS IAM, Azure IAM, etc.) que se incorpore a la rutina de su organización y se aplique a cada nueva aplicación. Estos procesos de autorización pueden provenir del propio framework o de cualquier número de módulos externos fáciles de usar.
Por último, su organización debería adoptar el concepto de mínimo privilegio. Todas las acciones y funciones deben ser denegadas por defecto, y el proceso de autorización debe utilizarse para dar a los usuarios válidos permiso para hacer lo que necesiten. Sólo se les debe dar el permiso suficiente para realizar la función requerida, y sólo durante el tiempo necesario.
La falta de controles de acceso a nivel de función puede ser devastadora. Pero, afortunadamente, si incorpora a su organización buenas prácticas de autorización a nivel de infraestructura, puede evitar fácilmente que este problema se produzca.
¿Crees que estás preparado para detectar un error de control de acceso en la naturaleza? Compara estos fragmentos de código de Docker; uno vulnerable y otro seguro:
Vulnerable:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER root
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
Seguro:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER nobody
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
Aprende más, desafíate a ti mismo
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 y vulnerabilidades de seguridad.
Y si te lo perdiste antes, puedes probar un reto de seguridad gamificado de IaC en la plataforma Secure Code Warrior para mantener todos tus conocimientos de ciberseguridad perfeccionados y actualizados.
Estén atentos al próximo capítulo.

Ha llegado el momento de la siguiente entrega de nuestra serie Infrastructure as Code, los blogs que llevarán a los desarrolladores como usted a un nivel completamente nuevo de conciencia de la seguridad a la hora de desplegar una infraestructura segura dentro de su propia organización.
Ah, por cierto... ¿cómo te fue con el reto de la desconfiguración de seguridad en el blog anterior? Si quieres seguir adelante y abordar una vulnerabilidad de control de acceso de nivel funcional que falta ahora mismo, dirígete a la plataforma:
(El enlace anterior le llevará al desafío de Kubernetes, pero una vez que esté en la plataforma, utilice el menú desplegable para elegir también entre Ansible, CloudFormation, Terraform o Docker. Tú eliges).
Casi todas las aplicaciones desplegadas hoy en día tienen algún tipo de mecanismo de control de acceso que comprueba si un usuario tiene o no permiso para realizar las funciones solicitadas. Es prácticamente la piedra angular de una buena seguridad, además de la funcionalidad, cuando se crea una aplicación. De hecho, todas las aplicaciones web necesitan controles de acceso para que usuarios con diferentes privilegios puedan utilizar el programa.
Sin embargo, pueden surgir problemas cuando esas mismas funciones de verificación para el control de acceso no se realizan a nivel de la infraestructura, o están mal configuradas. Sin un control de acceso a nivel de infraestructura en perfecto orden, se abre toda una empresa a los piratas informáticos, que pueden utilizar esa vulnerabilidad como su puerta de entrada para el fisgoneo no autorizado o un ataque completo.
De hecho, explotar las vulnerabilidades de control de acceso a funciones ausentes o mal configuradas es extremadamente fácil. Los atacantes ni siquiera necesitan ser demasiado hábiles. Sólo necesitan saber qué comandos ejecutan funciones dentro de cualquier marco que soporte la aplicación. Si lo saben, es sólo una cuestión de prueba y error. Pueden enviar continuamente peticiones que no deberían estar permitidas, y en cuanto una de ellas tenga éxito, el sitio web, la aplicación, el servidor o incluso toda la red en cuestión podrían quedar expuestos.
¿Cómo funcionan los exploits de control de acceso a nivel de funciones faltantes?
Hay algunas formas en las que los controles de acceso a nivel de función pueden colarse en una organización. Por ejemplo, el acceso a nivel de función puede dejarse en manos de una aplicación y no ser verificado por la infraestructura subyacente. O bien, el control de acceso a nivel de infraestructura puede estar mal configurado. En algunos casos, los administradores asumen que los usuarios no autorizados no sabrán cómo llegar a los recursos de la infraestructura que sólo los usuarios de nivel superior deberían poder ver y utilizan un modelo de "seguridad por oscuridad" que rara vez funciona.
Para un ejemplo de seguridad por oscuridad, la siguiente URL es probablemente vulnerable a un ataque:
http://companywebsite.com/app/NormalUserHomepage
Si un usuario autentificado emplea una técnica llamada Forced URL Browsing, podría intentar llegar a una página que sólo se muestra a los administradores. Un ejemplo podría ser:
http://companywebsite.com/app/AdminPages
Si no existe una verificación del lado del servidor, simplemente se les mostrará la página de administración (si su nombre coincide con la solicitud) y entonces tendrán acceso a cualquier función adicional que los administradores hagan desde la nueva página. Si el servidor devuelve un error de "página no encontrada" al atacante, éste puede simplemente seguir intentándolo hasta que descubra el nombre de la página de administración.
Para los atacantes, explotar la falta de controles de acceso a nivel de función es un proceso similar. En lugar de intentar navegar por páginas no autorizadas, envían solicitudes de funciones. Por ejemplo, podrían intentar crear un nuevo usuario con derechos de administrador. Así que su solicitud sería algo así, dependiendo del marco de trabajo:
POST/action/createuser name=hacker&pw=password&role=admin
Si no existe un control de acceso a nivel de función, entonces el ejemplo anterior tendría éxito y se crearía una nueva cuenta de administrador. Una vez que el atacante vuelva a iniciar sesión como el nuevo administrador, tendría el mismo acceso y permisos que cualquier otro administrador en esa red o servidor.
La solución a la falta de controles de acceso a nivel de función
Debido a que es tan fácil para los atacantes explotar las vulnerabilidades de control de acceso a nivel de funciones faltantes, es crítico que se encuentren, se arreglen y se prevengan. Afortunadamente, esto no es excesivamente difícil con algunos conocimientos y una formación básica en seguridad de la Infraestructura como Código.
La principal protección vendrá de la implementación de la autorización basada en roles a nivel de infraestructura. Nunca confíes en que las aplicaciones se encarguen de esa función. Incluso si lo hacen, tener una autorización del lado de la infraestructura garantizará que no se pierda nada. Lo ideal es que la autorización provenga de un lugar centralizado (por ejemplo, AWS IAM, Azure IAM, etc.) que se incorpore a la rutina de su organización y se aplique a cada nueva aplicación. Estos procesos de autorización pueden provenir del propio framework o de cualquier número de módulos externos fáciles de usar.
Por último, su organización debería adoptar el concepto de mínimo privilegio. Todas las acciones y funciones deben ser denegadas por defecto, y el proceso de autorización debe utilizarse para dar a los usuarios válidos permiso para hacer lo que necesiten. Sólo se les debe dar el permiso suficiente para realizar la función requerida, y sólo durante el tiempo necesario.
La falta de controles de acceso a nivel de función puede ser devastadora. Pero, afortunadamente, si incorpora a su organización buenas prácticas de autorización a nivel de infraestructura, puede evitar fácilmente que este problema se produzca.
¿Crees que estás preparado para detectar un error de control de acceso en la naturaleza? Compara estos fragmentos de código de Docker; uno vulnerable y otro seguro:
Vulnerable:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER root
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
Seguro:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER nobody
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
Aprende más, desafíate a ti mismo
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 y vulnerabilidades de seguridad.
Y si te lo perdiste antes, puedes probar un reto de seguridad gamificado de IaC en la plataforma Secure Code Warrior para mantener todos tus conocimientos de ciberseguridad perfeccionados y actualizados.
Estén atentos al próximo capítulo.

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.
Ha llegado el momento de la siguiente entrega de nuestra serie Infrastructure as Code, los blogs que llevarán a los desarrolladores como usted a un nivel completamente nuevo de conciencia de la seguridad a la hora de desplegar una infraestructura segura dentro de su propia organización.
Ah, por cierto... ¿cómo te fue con el reto de la desconfiguración de seguridad en el blog anterior? Si quieres seguir adelante y abordar una vulnerabilidad de control de acceso de nivel funcional que falta ahora mismo, dirígete a la plataforma:
(El enlace anterior le llevará al desafío de Kubernetes, pero una vez que esté en la plataforma, utilice el menú desplegable para elegir también entre Ansible, CloudFormation, Terraform o Docker. Tú eliges).
Casi todas las aplicaciones desplegadas hoy en día tienen algún tipo de mecanismo de control de acceso que comprueba si un usuario tiene o no permiso para realizar las funciones solicitadas. Es prácticamente la piedra angular de una buena seguridad, además de la funcionalidad, cuando se crea una aplicación. De hecho, todas las aplicaciones web necesitan controles de acceso para que usuarios con diferentes privilegios puedan utilizar el programa.
Sin embargo, pueden surgir problemas cuando esas mismas funciones de verificación para el control de acceso no se realizan a nivel de la infraestructura, o están mal configuradas. Sin un control de acceso a nivel de infraestructura en perfecto orden, se abre toda una empresa a los piratas informáticos, que pueden utilizar esa vulnerabilidad como su puerta de entrada para el fisgoneo no autorizado o un ataque completo.
De hecho, explotar las vulnerabilidades de control de acceso a funciones ausentes o mal configuradas es extremadamente fácil. Los atacantes ni siquiera necesitan ser demasiado hábiles. Sólo necesitan saber qué comandos ejecutan funciones dentro de cualquier marco que soporte la aplicación. Si lo saben, es sólo una cuestión de prueba y error. Pueden enviar continuamente peticiones que no deberían estar permitidas, y en cuanto una de ellas tenga éxito, el sitio web, la aplicación, el servidor o incluso toda la red en cuestión podrían quedar expuestos.
¿Cómo funcionan los exploits de control de acceso a nivel de funciones faltantes?
Hay algunas formas en las que los controles de acceso a nivel de función pueden colarse en una organización. Por ejemplo, el acceso a nivel de función puede dejarse en manos de una aplicación y no ser verificado por la infraestructura subyacente. O bien, el control de acceso a nivel de infraestructura puede estar mal configurado. En algunos casos, los administradores asumen que los usuarios no autorizados no sabrán cómo llegar a los recursos de la infraestructura que sólo los usuarios de nivel superior deberían poder ver y utilizan un modelo de "seguridad por oscuridad" que rara vez funciona.
Para un ejemplo de seguridad por oscuridad, la siguiente URL es probablemente vulnerable a un ataque:
http://companywebsite.com/app/NormalUserHomepage
Si un usuario autentificado emplea una técnica llamada Forced URL Browsing, podría intentar llegar a una página que sólo se muestra a los administradores. Un ejemplo podría ser:
http://companywebsite.com/app/AdminPages
Si no existe una verificación del lado del servidor, simplemente se les mostrará la página de administración (si su nombre coincide con la solicitud) y entonces tendrán acceso a cualquier función adicional que los administradores hagan desde la nueva página. Si el servidor devuelve un error de "página no encontrada" al atacante, éste puede simplemente seguir intentándolo hasta que descubra el nombre de la página de administración.
Para los atacantes, explotar la falta de controles de acceso a nivel de función es un proceso similar. En lugar de intentar navegar por páginas no autorizadas, envían solicitudes de funciones. Por ejemplo, podrían intentar crear un nuevo usuario con derechos de administrador. Así que su solicitud sería algo así, dependiendo del marco de trabajo:
POST/action/createuser name=hacker&pw=password&role=admin
Si no existe un control de acceso a nivel de función, entonces el ejemplo anterior tendría éxito y se crearía una nueva cuenta de administrador. Una vez que el atacante vuelva a iniciar sesión como el nuevo administrador, tendría el mismo acceso y permisos que cualquier otro administrador en esa red o servidor.
La solución a la falta de controles de acceso a nivel de función
Debido a que es tan fácil para los atacantes explotar las vulnerabilidades de control de acceso a nivel de funciones faltantes, es crítico que se encuentren, se arreglen y se prevengan. Afortunadamente, esto no es excesivamente difícil con algunos conocimientos y una formación básica en seguridad de la Infraestructura como Código.
La principal protección vendrá de la implementación de la autorización basada en roles a nivel de infraestructura. Nunca confíes en que las aplicaciones se encarguen de esa función. Incluso si lo hacen, tener una autorización del lado de la infraestructura garantizará que no se pierda nada. Lo ideal es que la autorización provenga de un lugar centralizado (por ejemplo, AWS IAM, Azure IAM, etc.) que se incorpore a la rutina de su organización y se aplique a cada nueva aplicación. Estos procesos de autorización pueden provenir del propio framework o de cualquier número de módulos externos fáciles de usar.
Por último, su organización debería adoptar el concepto de mínimo privilegio. Todas las acciones y funciones deben ser denegadas por defecto, y el proceso de autorización debe utilizarse para dar a los usuarios válidos permiso para hacer lo que necesiten. Sólo se les debe dar el permiso suficiente para realizar la función requerida, y sólo durante el tiempo necesario.
La falta de controles de acceso a nivel de función puede ser devastadora. Pero, afortunadamente, si incorpora a su organización buenas prácticas de autorización a nivel de infraestructura, puede evitar fácilmente que este problema se produzca.
¿Crees que estás preparado para detectar un error de control de acceso en la naturaleza? Compara estos fragmentos de código de Docker; uno vulnerable y otro seguro:
Vulnerable:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER root
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
Seguro:
FROM quay.io/prometheus/busybox:latest
ARG VERSION=0.12.1
ARG FILENAME=mysqld_exporter-${VERSION}.linux-amd64
ARG URL=https://github.com/prometheus/mysqld_exporter/releases/download/v
RUN wget $URL$VERSION/$FILENAME.tar.gz && \
tar -xvf $FILENAME.tar.gz && \
mv $FILENAME/mysqld_exporter /bin/mysqld_exporter
COPY .my.cnf /home/.my.cnf
COPY ./scripts/entrypoint.sh ~/entrypoint.sh
USER nobody
EXPOSE 9104
ENTRYPOINT [ "sh", "~/entrypoint.sh" ]
CMD [ "/bin/mysqld_exporter" ]
Aprende más, desafíate a ti mismo
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 y vulnerabilidades de seguridad.
Y si te lo perdiste antes, puedes probar un reto de seguridad gamificado de IaC en la plataforma Secure Code Warrior para mantener todos tus conocimientos de ciberseguridad perfeccionados y actualizados.
Estén atentos al próximo capítulo.
Í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)
