CVE-2026-21589: Falla de Salto de Directorio en Atlassian Data Center Bajo Explotación Activa
CVE-2026-21589 (CWE-22 (Limitación Indebida de Ruta a un Directorio Restringido))
Severity: CRÍTICA (CVSS 9.3)
Status: Explotada Activamente en la Red (PoC Pública desde el 6 de Octubre de 2026)
Affected Systems: Bamboo Data Center, Bitbucket Data Center, Confluence Data Center, Crowd Data Center, Crucible, Fisheye, Jira Software Data Center, Jira Service Management Data Center
Fixed In: Confluence 9.2.1/8.5.17, Jira 9.12.14/10.1.1, Bitbucket 8.19.9/9.4.1, Crowd 5.2.5/5.3.3
Entre el 6 y el 8 de octubre de 2026, empresas de telemetría y seguridad observaron una intensa ola de explotación automatizada dirigida contra CVE-2026-21589 (CVSSv4 9.3), una vulnerabilidad crítica de lectura arbitraria de archivos en las ediciones autogestionadas y Data Center de los productos centrales de Atlassian. La falla permite a atacantes remotos sin autenticación descargar archivos confidenciales del servidor, facilitando el robo de contraseñas de bases de datos y el acceso total a la infraestructura.
Análisis de la Causa Raíz Técnica
El defecto se ubica en el gestor de recursos web de Atlassian (atlassian-plugins-webresource*.jar), responsable de procesar recursos estáticos y plugins. Aunque el sistema filtra peticiones que contienen ../, el componente acepta un delimitador especial de dos puntos dobles (::) para invocar recursos internos. Cuando un atacante envía una petición con :: en la ruta, el analizador divide la cadena de forma prematura y el cargador de archivos busca la ruta de manera directa respecto al directorio raíz de la aplicación sin verificar la ruta canónica:
// Abstracción de la lógica vulnerable en atlassian-plugins-webresource
public Resource getPluginResource(String moduleKey, String resourceName) {
if (resourceName.contains("../")) {
throw new SecurityException("Secuencia de salto de directorio ilegal");
}
// FALLA: El delimitador "::" evade la validación de ruta canónica
if (resourceName.contains("::")) {
String[] parts = resourceName.split("::", 2);
String targetPath = parts[1];
File file = new File(this.servletContext.getRealPath("/"), targetPath);
if (file.exists() && file.isFile()) {
return new FileResource(file);
}
}
return defaultResolver.resolve(moduleKey, resourceName);
}
Una solicitud HTTP como:
GET /s/batch/cp/::WEB-INF/classes/crowd.properties HTTP/1.1
Host: jira.internal.corp
User-Agent: Mozilla/5.0
provoca que el servidor entregue el archivo crowd.properties, exponiendo contraseñas de acceso y semillas criptográficas en texto plano.
Telemetría y Detección de Compromiso
Inspeccione los registros de acceso en proxies inversos y balanceadores buscando peticiones con sintaxis de dos puntos:
url.path: (*/batch/*) AND (url.path: (*::* OR *%3A%3A*))Regla de detección en Suricata:
alert http any any -> $HTTP_SERVERS any (msg:"COLIBRISEC - Atlassian Data Center Arbitrary File Read (CVE-2026-21589)"; flow:established,to_server; http.uri; content:"/batch/"; nocase; content:"::"; distance:0; pcre:"/::.*(?:WEB-INF|META-INF|.properties|.xml)/i"; classtype:web-application-attack; sid:202621589; rev:1;)
Pasos de Remediación
- Actualizar Inmediatamente: Instalar las versiones corregidas de Jira (9.12.14 / 10.1.1), Confluence (8.5.17 / 9.2.1), Bitbucket (8.19.9 / 9.4.1) o Crowd (5.2.5 / 5.3.3).
- Regla de Bloqueo en WAF: Configurar el WAF o proxy inverso para responder HTTP 403 ante peticiones que incluyan
::o%3a%3adirigidas hacia Atlassian. - Rotar Credenciales: Si se identifican solicitudes exitosas en los registros, rotar inmediatamente las credenciales de bases de datos y cuentas de servicio.