JSON, XML & Yaml Hacking & Issues
Reading time: 5 minutes
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.
Go JSON Decoder
Se detectaron los siguientes problemas en el Go JSON, aunque también podrían estar presentes en otros lenguajes. Estos problemas se publicaron en esta entrada de blog.
Los analizadores JSON, XML y YAML de Go tienen una larga trayectoria de inconsistencias y configuraciones predeterminadas inseguras que pueden ser abusadas para eludir la autenticación, escalar privilegios o exfiltrar datos sensibles.
(Un)Marshaling Datos Inesperados
El objetivo es explotar estructuras que permitan a un atacante leer/escribir campos sensibles (por ejemplo, IsAdmin
, Password
).
- Example Struct:
type User struct {
Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"`
IsAdmin bool `json:"-"`
}
- Vulnerabilidades Comunes
- Etiqueta faltante (sin etiqueta = el campo aún se analiza por defecto):
type User struct {
Username string
}
Carga útil:
{"Username": "admin"}
- Uso incorrecto de
-
:
type User struct {
IsAdmin bool `json:"-,omitempty"` // ❌ wrong
}
Carga útil:
{"-": true}
✔️ Forma adecuada de bloquear un campo para que no sea (des)serializado:
type User struct {
IsAdmin bool `json:"-"`
}
Diferenciales de Parser
El objetivo es eludir la autorización aprovechando cómo diferentes parsers interpretan la misma carga útil de manera diferente, como en:
- CVE-2017-12635: elusión de Apache CouchDB a través de claves duplicadas
- 2022: RCE de Zoom 0-click a través de la inconsistencia del parser XML
- elusión de SAML de GitLab 2025 a través de peculiaridades de XML
1. Campos Duplicados:
El encoding/json
de Go toma el último campo.
json.Unmarshal([]byte(`{"action":"UserAction", "action":"AdminAction"}`), &req)
fmt.Println(req.Action) // AdminAction
Otros analizadores (por ejemplo, Jackson de Java) pueden tomar el primero.
2. Insensibilidad a Mayúsculas y Minúsculas: Go es insensible a mayúsculas y minúsculas:
json.Unmarshal([]byte(`{"AcTiOn":"AdminAction"}`), &req)
// matches `Action` field
Incluso los trucos de Unicode funcionan:
json.Unmarshal([]byte(`{"aKtionſ": "bypass"}`), &req)
3. Desajuste entre servicios: Imagina:
- Proxy escrito en Go
- Servicio de AuthZ escrito en Python
El atacante envía:
{
"action": "UserAction",
"AcTiOn": "AdminAction"
}
- Python ve
UserAction
, lo permite - Go ve
AdminAction
, lo ejecuta
Confusión de Formato de Datos (Políglotas)
El objetivo es explotar sistemas que mezclan formatos (JSON/XML/YAML) o que fallan abiertamente en errores de análisis como:
- CVE-2020-16250: HashiCorp Vault analizó JSON con un analizador XML después de que STS devolviera JSON en lugar de XML.
El atacante controla:
- El encabezado
Accept: application/json
- Control parcial del cuerpo JSON
El analizador XML de Go lo analizó de todos modos y confió en la identidad inyectada.
- Carga útil elaborada:
{
"action": "Action_1",
"AcTiOn": "Action_2",
"ignored": "<?xml version=\"1.0\"?><Action>Action_3</Action>"
}
Resultado:
- Go JSON parser:
Action_2
(sin distinción entre mayúsculas y minúsculas + el último gana) - YAML parser:
Action_1
(sensible a mayúsculas y minúsculas) - XML parser: analiza
"Action_3"
dentro de la cadena
🔐 Mitigaciones
Riesgo | Solución |
---|---|
Campos desconocidos | decoder.DisallowUnknownFields() |
Campos duplicados (JSON) | ❌ Sin solución en stdlib |
Coincidencia sin distinción | ❌ Sin solución en stdlib |
Datos basura en XML | ❌ Sin solución en stdlib |
YAML: claves desconocidas | yaml.KnownFields(true) |
tip
Aprende y practica Hacking en AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprende y practica Hacking en GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprende y practica Hacking en Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Apoya a HackTricks
- Revisa los planes de suscripción!
- Únete al 💬 grupo de Discord o al grupo de telegram o síguenos en Twitter 🐦 @hacktricks_live.
- Comparte trucos de hacking enviando PRs a los HackTricks y HackTricks Cloud repositorios de github.