` Endereço 6 ''s especial-property checks erro de classificação IPv 4 - mapeado (`::ffff: 0: 0 / 96 `) e NAT 64 bem conhecido (` 64:ff 9 b::/ 96 `) IPv 6 endereços. Estas verificações classificam um endereço pelo seu IPv 6 embrulho em vez do IPv 4 Endereço que incorpora, então ` isLoopback()`, ` isLinkLocal()`, ` isMulticast()` e ` isUnspecificed()` todos retornam ` false` para literais como `::ffff: 127.0.0.1 ` ou `::ffff: 169.254.169.254 ` que realmente rota para loopback, RFC 1918, ou destinos locais de link (cloud- metadados). ` Endereço 6 ` também não tinha o método ` isPrivate()`, por isso um RFC mapeado 1918 o endereço não pôde ser detectado. Um aplicativo que constrói uma decisão de confiança na rede sobre estes cheques (por exemplo, um filtro destinado a bloquear o Forgery de solicitação lateral ao servidor ou SSRF) pode, portanto, tratar um alvo interno como externo e permitir o pedido. SSRF é um ataque em que um endereço fornecido pelo usuário coaxe o servidor para fazer um pedido para um destino interno que o usuário não poderia alcançar de outra forma, como um serviço de loopback ou um endpoint de metadados na nuvem. ` Endereço 6.getType()` classifica um endereço combinando-o com uma tabela de IPv conhecida 6 prefixos especiais de utilização, retornando `Global unicast` quando nada combina. Essa tabela não tinha entrada para o IPv 4 - faixa mapeada (`::ffff: 0: 0 / 96 `), então cada endereço mapeado caiu para `Global unicast`; NAT 64 endereços correspondiam ao seu próprio ` NAT 64...` rótulos. O booleano verifica `isLoopback`, `isUnspecificed` e `isMulticast` compararam `getType()` com uma etiqueta fixa e assim retornaram `false`, enquanto `isLinkLocal` e `isULA` verificaram apenas o IPv nativo 6 gamas.

A biblioteca já exposta ` isMapped 4 () e ` to 4 ()`, mas não os aplicou dentro destes cheques, por isso um mapa ou NAT 64 endereço nunca foi normalizado para seu IPv incorporado 4 endereço antes da classificação. A correspondência subjacente do CIDR está correta; o defeito é que a tabela de uso especial omitiu o IPv 4 -mapeado intervalo e as verificações não realizaram nenhum IPv embedded 4 normalização. ### versões afetadas. `>= 10.1.1, <= 10.2.0 `. A API de classificação ` is* ' foi introduzida para ` Endereço 4 ` em 10.1.1 e estendido a ` Endereço 6 ` em 10.2.0. Lançamentos antes 10.1.1 não expor esta API e não ser afetado através deste vetor. A classificação errónea cobre todo o `::ffff: 0: 0 / 96 ` gama, tanto em pontilhada e notação hexagonal e caso- insensível, mais o ` 64:ff 9 b::/ 96 ` NAT 64 Prefixo bem conhecido:.

Endereço Relatórioado como Na verdade pontos em:::ffff: 127.0.0.1 " / ":: ffff: 7 f 00: 1 `` Loopback Global Unicast` (`) 127.0.0.0 / 8 ")).............................................................................................................................. 10.0.0.1 `. Global monocast. RFC 1918 ` 10 / 8 `............................................................................................................................... 172.16.5.5 `. Global monocast. RFC 1918 ` 172.16 / 12 `............................................................................................................................... 192.168.1.1 `. Global monocast. RFC 1918 ` 192.168 / 16 `............................................................................................................................... 169.254.169.254 ` / `::ffff:a 9 fe: a 9 Fe`. Metada global de link- local / nuvem (IMDS) `::ffff: 100.64.0.1 `. Global monocast. CGNAT ` 100.64 / 10 `............................................................................................................................... 0.0.0.0 " / ":: ffff: 255.255.255.255 `. Global unicast. não especificado / transmissão ` ` 64:ff 9 b:: 7 f 00: 1 ` / ` 64:ff 9 b:::a 9 fe: a 9 fe`. NAT 64 (bem conhecido). Loopback / IMDS via NAT 64 | Para IPv 4 - mapeado endereços das rotas do sistema operacional do host para o IPv 4 pilha, então a classificação errada é alcançada em qualquer máquina de dupla- pilha. Para NAT 64, a passagem de classificação é incondicional, mas a acessabilidade de extremidade a extremidade requer adicionalmente um NAT 64 /DNS 64 gateway na rede de implantação. ### Prova de conceito. Um guarda montado a partir dessas verificações permite hospedeiros internos através de:.

Endereço ``` js const { 4, Endereço 6 } = require( 'ip- address'); // true => bloqueio como interno, false => permite a função de saída é Bloqueada(host) { try { const a = novo Endereço 4 (host); retorna a. isPrivate()). isLoopback(). a. isLinkLocal(). a. isCGNAT(). a. isMulticast(). a. isUnspecificed(). a. isBroadcast(); } captura {} tentar { const a = novo Endereço 6 (host); devolve a. isLoopback()). a. isLinkLocal(). a. isULA(). a. isMulticast(). a. isUnspecificed(); } captura {} retorna false; } para (const h de [' 127.0.0.1 ', ':: 1 ', ' 10.0.0.1 ', ' 8.8.8.8 ', '::ffff: 127.0.0.1 ', '::ffff: 10.0.0.1 ', '::ffff: 169.254.169.254 ', ' 64:ff 9 b:: 7 f 00: 1 ']) { console.log( isBlocked( h)? 'BLOCK ': 'ALLOW ', h); } ```.

Em versões afetadas, esta impressão (note que cada `::ffff:...` e ` 64:ff 9 b:::...` é permitido o alvo interno: BLOQUEIO 127.0.0.1 BLOQUEO:: 1 BLOQUEIO 10.0.0.1 PERMITAR 8.8.8.8 OUTROS:: ffff: 127.0.0.1 OUTROS:: ffff: 10.0.0.1 OUTROS:: ffff: 169.254.169.254 PERMITAR 64:ff 9 b:: 7 f 00: 1 ```.

As três primeiras linhas (loopback nativo, IPv nativo 6 loopback, e um RFC literal 1918 endereço) estão bloqueados como esperado; o IPv 4 - mapeado e NAT 64 são permitidas formas dos mesmos destinos internos. Atualizar para a versão corregida. Na correção, ` Endereço 6 ` normaliza IPv 4 - mapeado e NAT 64 endereços bem conhecidos para o IPv incorporado 4 endereço antes de classificar, via um novo ` embeddedIPv 4 ()` ajudante que 'isLoopback`, 'isLinkLocal', 'isMulticast' e 'isUnspecificed' consultem primeiro. `Endereço 6 ` também ganha ` isPrivate()`, ` isCGNAT()` e ` isBroadcast()` para paridade com ` Endereço 4 `, e `getType()` agora rotula o `::ffff: 0: 0 / 96 ` gama como ` IPv 4 -Mapeado. Após atualização, ` novo endereço 6 ('::ffff: 127.0.0.1 '). isLoopback()` retorna "verdadeiro" e "novo Endereço" 6 ('::ffff: 10.0.0.1 '. isPrivate() ' retorna 'verdadeira '.

Se você não puder atualizar imediatamente, normalize IPv incorporado 4 se endereça antes de classificar: chame ` to 4 ()` em qualquer endereço onde ` isMapped 4 ()` (ou adesão em ` 64:ff 9 b::/ 96 `) é verdade, e executar seu IPv 4 verifica o resultado. ### Uma nota na defesa SSRF. Estes métodos são classificadores de endereço, não uma defesa completa da SSRF. Independentemente desta correção, um guarda SSRF robusto deve resolver o nome do host e validar o IP *resolvido* contra o socket ao qual se conecta e conta para reencaixar e redirecionar DNS. Trate estas verificações como uma camada, não a única.

Relato pelo @OV- 0 -Vo. Registro de aconselhamento: GHSA- 22 jq-vg 5 J- 6 Vgg. Identificadores relacionados: CVE- 2026 - 54272.

Tempo: GitHub Advisory Database publicou este registro em 2026 - 08 - 03 T 19: 52: 33.000 Z e lista a sua última modificação como 2026 - 08 - 03 T 19: 52: 33.000 Z. Gravidade: MODERAR. Dados de pontuação publicados: CVSS_V 4: CVSS: 4.0 /AV:N/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:H/SI:N/África do Sul:N.

Software afetado e informações de versão: endereço IP do pacote npm — ECOSISTEM: introduzido 10.1.1, corrigido 10.2.1. Classificação e evidência: identificadores de fraqueza CWE- 20, CWE- 918. O registro contém 5 suporte de referências nestes tipos: WEB, AVISO, EMBALAGAMENTO.