Blog

Cómo evolucionan las directrices de codificación segura

September 15, 2017
Pieter De Cremer

La semana pasada estuve investigando las vulnerabilidades en Java Spring para actualizar nuestras directrices de codificación segura. Estaba analizando los desafíos existentes en nuestra plataforma y me di cuenta de que había algunos en XSS al mostrar los parámetros de URL en las páginas JSP. El ejemplo de código incorrecto tendría un aspecto similar al siguiente:

<input type="text" name="username" value="${param.username}">

La solución correcta era eliminar el parámetro URL por completo y la descripción menciona que escapar del parámetro URL de la manera correcta también es seguro.

Ahora, mi trabajo consiste en formular la guía de codificación segura de una manera que sea clara para los desarrolladores y las restrinja lo menos posible mientras sigo escribiendo código seguro. En este caso, preferiría dejar que los desarrolladores conserven la funcionalidad deseada y recomendarles que lo hagan de forma segura evitando el parámetro URL. De esta forma, el código ya no contiene una vulnerabilidad de XSS. El ejemplo anterior se puede proteger de la siguiente manera:

<input type="text" name="username" value="${fn:escapeXml(param.username)}">

Y esta fue nuestra guía de codificación segura durante unos días, hasta que me topé con una Página de OWASP sobre la inyección de lenguaje de expresión. Esta página describe cómo se puede abusar del Spring Expression Language (SpEL) para inyectarlo con graves consecuencias, incluida la ejecución remota de código. Yo tenía que averiguar si había casos en los que el código que cumplía nuestra directriz de codificación segura pudiera seguir viéndose afectado por esta vulnerabilidad. Así que escribí una aplicación de prueba rápida para evaluar las expresiones de SpEl y probé las entradas con y sin Xml para ver si podía encontrar algunos escenarios que no se detectaran. Y lo hice, hay expresiones maliciosas que no contienen ningún carácter detectado por XMLescape. He publicado la demostración funcional en nuestro github, que puedes encontrar aquí.

Y, por supuesto, he actualizado nuestra guía de codificación segura, que ahora dice: «No muestre ni evalúe los parámetros de URL con el Spring Expression Language (SpEL)».

El impacto general de este problema es elevado, por las siguientes razones: - Un atacante podría modificar e invocar funciones en el servidor de aplicaciones. - Acceso no autorizado a datos y funciones, así como secuestro de cuentas y ejecución remota de código. - Problemas de confidencialidad e integridad derivados de un ataque exitoso.

https://www.owasp.org/index.php/Expression_Language_Injection

Share on social
Lema

Govern AI-driven development before it ships

Measure AI-assisted risk, enforce secure coding policy at commit, and accelerate secure delivery across your SDLC.

book a demo
book a demo
Lema

Explore more blogs

Lorem ipsum diam quis enim lobortis scelerisque fermentum dui faucibus in ornare quam viverra orci sagittis eu volutpat odio facilisis.

browse all
Case Study
Filter Label
This is some text inside of a div block.

Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Learn More
Case Study
Filter Label
This is some text inside of a div block.

Security as culture: How Blue Prism cultivates world-class secure developers

Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed

Learn More
Case Study
Filter Label
This is some text inside of a div block.

One Culture of Security: How Sage built their security champions program with agile secure code learning

Discover how Sage enhanced security with a flexible, relationship-focused approach, creating 200+ security champions and achieving measurable risk reduction.

Learn More
Case Study
Filter Label
This is some text inside of a div block.

Post-Quantum Cryptography: Quantum Computers Will Break Today’s Encryption – Are You Ready?

Post-quantum cryptography (PQC) is critical for protecting data from quantum computing threats. Learn how “harvest now, decrypt later” exposes risk and how developers can prepare for quantum-safe security.

Learn More
Case Study
Filter Label
This is some text inside of a div block.

Enabler 2: Senior Leadership Sponsorship

Explore Enabler 2: Senior Leadership Sponsorship. Learn why active buy-in from the CIO, CTO, and CISO is vital to drive developer adoption and program credibility.

Learn More
Case Study
Filter Label
This is some text inside of a div block.

Observe and Secure the ADLC: A Four-Point Framework for CISOs and Development Teams Using AI

While development teams look to make the most of GenAI’s undeniable benefits, we’d like to propose a four-point foundational framework that will allow security leaders to deploy AI coding tools and agents with a higher, more relevant standard of security best practices. It details exactly what enterprises can do to ensure safe, secure code development right now, and as agentic AI becomes an even bigger factor in the future.

Learn More

Secure AI-driven development before it ships

See developer risk, enforce policy, and prevent vulnerabilities across your software development lifecycle.

Book a demo