Microsoft Patch Tuesday March 2026

Ontem, em meu diário sobre as varreduras de URLs “/proxy/”, observei como os invasores estão usando endereços IPv6 mapeados em IPv4 para possivelmente ofuscar seus ataques. Esses endereços são definidos em RFC 4038. Esses endereços são um dos muitos mecanismos de transição usados ​​para manter alguma compatibilidade com versões anteriores à medida que o IPv6 é implantado. Muitos aplicativos modernos usam código de rede somente IPv6. Endereços IPv6 mapeados em IPv4 podem ser usados ​​para representar endereços IPv4 nesses casos. Os endereços IPv6 mapeados em IPv4 não são usados ​​na rede, mas sim traduzidos para IPv4 antes que um pacote seja enviado.

Para mapear um endereço IPv4 em IPv6, o prefixo “::ffff:/96” é usado. Isso deixa os últimos 32 bits para representar o endereço IPv4. Por exemplo, “10.5.2.1” se transforma em “::ffff:0a05:0201”. Muitos aplicativos exibem os últimos 4 bytes em formato decimal para facilitar a leitura. Por exemplo, você verá “::ffff:10.5.2.1”.

Se endereços IPv6 mapeados em IPv4 podem ser usados, depende da aplicação específica. Aqui estão alguns exemplos, mas sinta-se à vontade para experimentar:

ping6 no macOS:

%ping6 ::ffff:0a05:0201
PING6(56=40+8+8 bytes) ::ffff:10.5.2.147 --> ::ffff:10.5.2.1
ping6: sendmsg: argumento inválido
ping6: escreveu ::ffff:0a05:0201 16 caracteres, ret=-1

Observe que o ping6 exibe o endereço IPv4 em formato decimal, mas se recusa a enviar quaisquer pacotes, pois seriam pacotes IPv4, não IPv6.

%ping ::ffff:0a05:0201
ping: não é possível resolver ::ffff:0a05:0201: Host desconhecido

O ping IPv4 normal não reconhece o formato de um endereço IP e, em vez disso, interpreta-o como um nome de host, o que falha.

ping6 no Linux não retorna um erro. Ele simplesmente parece “travar” e nenhum pacote é emitido. A execução do strace mostra:

sendto(3, "200{2634i:271i(20062021222324252627"..., 64, 0, {sa_family=AF_INET6, sin6_port=htons(58), sin6_flowinfo=htonl(0), inet_pton(AF_INET6, "::ffff:10.5.2.1", &sin6_addr), sin6_scope_id=0}, 28) = -1 ENETUNREACH (Network is unreachable)

recvmsg(3, {msg_namelen=28}, MSG_DONTWAIT|MSG_ERRQUEUE) = -1 EAGAIN (Resource temporarily unavailable)

Ele tenta configurar uma conexão IPv6 com base no argumento “AF_INET6” na chamada inet_pton, mas falha no endereço IPv4 mapeado.

ssh, por outro lado (no MacOS e Linux) funciona perfeitamente:

$ssh::ffff:0a05:0201 -p 11460
A autenticidade do host '(::ffff:10.5.2.1):11460 ((::ffff:10.5.2.1):11460)' não pode ser estabelecida.

O tráfego é enviado corretamente como tráfego IPv4.

curl é interessante porque usa o endereço IPv6 mapeado por IPv4 como cabeçalho de host:

$ curl -i http://(::ffff:0a80:010b)
HTTP/1.1 301 movido permanentemente
Servidor: nginx
Data: terça-feira, 17 de março de 2026, 11:32:10 GMT
Tipo de conteúdo: texto/html
Comprimento do conteúdo: 162
Conexão: keep-alive
Localização: https://(::ffff:0a80:010b)/

Tentei alguns servidores web diferentes e todos agiram da mesma maneira. Navegadores como Safari e Chrome também podem usar esses endereços. Em navegadores, pode ser possível evitar alguns filtros usando endereços IPv6 mapeados em IPv4 quando a correspondência simples de strings é usada. Observe como nos URLs o endereço IPv6 deve ser colocado entre colchetes para evitar “confusão de dois pontos”.

Alguma idéia do que mais testar ou como usar ou abusar desses endereços? Lembre-se de que na rede você terá tráfego IPv4 normal, e não tráfego IPv6 usando endereços IPv6 mapeados para IPv4.


Johannes B. Ullrich, Ph.D. , Reitor de Pesquisa, SANS.edu

Twitter|

Deseja saber mais sobre Segurança Clique Aqui!

Deixe um comentário

Translate »