`datamodel-code- generator`' da guarda anti- SSRF valida o IP resolvido de um alvo de fetch uma vez e permite que `httpx` execute a sua própria resolução DNS independente para se conectar, de modo que o endereço validado nunca seja pinneado. Um nome de máquina que se resolve para um IP público no momento da validação e um IP privado no momento da conexão (religação DNS) contorna o guarda e atinge o loopback, link-local cloud- metadata endpoints (` 169.254.169.254 `), e outros serviços internos — mesmo com o padrão ` allow_private_ network=False`. Este é um pedido falsificado do lado do servidor que pode ser alcançado quando a ferramenta busca um URL influenciado pelo atacante (remote `$ref`, ou `--url`). Em ` src/datamodel_code_generator/http.py`, `get_body()` chama `_validate_url_for_fetch()`, que resolve o hospedeiro via `_get_ips_from_host()` (` socket.getaddrinfo`) e rejeita endereços não globais: ```python ips = _get_ips_from_host(host) # resolução # 1 (validação) se não ips: retorna se all(_is_safe_ip(ip) para ip em ips): devolver o aumento do SchemaFetchError(...) # bloqueia privado/link-local/reservado ```.
Ele se conecta então com uma resolução separada e independente. ```"python response = httpx.get(current_url,...) # resolução # 2 (conexão) -- NÃO foi afiado ao # 1 ``` Nada liga a conexão ao IP que passou a validação. Entre as duas resoluções, um registro controlado por um atacante de baixo nível de TTL pode virar de um endereço público (passa o guarda) para um privado (utilizado pela conexão). O loop de redirecionamento na mesma função revalida corretamente cada URL de redirecionamento, por isso este é especificamente um gap TOTOU/ rebining na verificação host- to- IP, e não um problema de redirecionamento.
Reprodutor autónomo: 1 fyn/ c 1 d 54 dd 6 ff 2 a 4 c 0 d 7 d 0 dabe 00 c 4985 f 4 Ele inicia um servidor HTTP loopback para um alvo interno e patches `socket.getaddrinfo` para retornar um IP público na busca do guarda e ` 127.0.0.1 ` no httpx's a forma determinística padrão de demonstrar esta classe TOTOU (o gatilho do mundo real é um registro DNS de baixa ligação de TTL para os controles atacantes). Reachability in normal use: o atacante registra um nome de host que religa e recebe a ferramenta para obter ` quer através de `--url` ou através de um remoto `$ref` em um esquema fornecido (os refs remotos são captados na configuração padrão).
Forjamento de solicitação do lado do servidor (CWE- 918 ) através de um tempo de verificação/ tempo de utilização de resolução lacuna (CWE- 367 ). Qualquer serviço ou conduto CI que executa `datamodel- code- generator` contra URLs influenciados pelo atacante é afetado, incluindo implantações que dependem da proteção padrão da rede privada. As consequências incluem a leitura de credenciais de istância- metadados na nuvem (` 169.254.169.254 `), alcançando apenas serviços HTTP internos, e sondando port/ host da rede interna, o documento coletado do alvo interno também é analisado e pode ser refletido na saída gerada. ### Estado do mantenedor. Confirmado por revisão de mantenedor e testes de regressão. O RP de correção privada foi fundido e lançado em ` 0.63.0 `: 7 x- vcc 2 - c 44 g/ interromper/ 1.
Resumo: pin o resultado DNS validado definido durante a busca HTTP para que um host não possa resolver para um endereço seguro durante a validação e um endereço diferente durante a conexão. Estado de lançamento: corrigido em ` 0.63.0 `; ` 0.62.0 " e antes são afetados.
Validação: ` uv execute --group test -- extra http pytest test/test_http.py` foi aprovada localmente para o pinning DNS e a cobertura de regressão de URL- fetch; ` uv execute --group corrigir ruff check src/ datamodel_code_generator/http.py test/test_http.py` foi aprovada. Enviado por: Hamza Haroon (thegr 1 xintose). Registro de aconselhamento: GHSA-vx 7 x- vcc 2 - c 44 g. Identificadores relacionados: CVE- 2026 - 55391.
Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 28 T 21: 45: 48.000 Z e lista a sua última modificação como 2026 - 07 - 28 T 21: 45: 48.000 Z. Severidade: ALTAMENTE. Dados de pontuação publicados: CVSS_V 3: CVSS: 3.1 /AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:L/A:N.
Software afetado e informações de versão: PyPI pacote de dados-modelo-code-generator — ECOSYSTEM: introduzido 0, corrigido 0.63.0. Classificação e evidência: identificadores de fraqueza CWE- 350, CWE- 367, CWE- 918. O registro contém 4 suporte de referências nestes tipos: WEB, PACKAGE.