TIL: Você pode fazer requisições HTTP sem curl usando Bash /dev/TCP
Visão geral do recurso: Bash /dev/tcp e /dev/udp
- O Bash expõe pseudo-caminhos especiais
/dev/tcp/host/porte/dev/udp/host/portque abrem sockets TCP/UDP. - Este é um recurso do Bash (e historicamente do KornShell), não POSIX;
dashe muitos outros shells não o suportam, e algumas distribuições já o compilaram sem esse recurso no passado. - Não é um dispositivo ou sistema de arquivos real como o
/netdo Plan 9; é um mecanismo interno do Bash.
Usos práticos e truques
- Uso comum: conectividade rápida entre contêineres ou verificações de health check quando ferramentas como
curl,wget,ncoutelnetnão estão instaladas. - Pessoas o usam em
HEALTHCHECKs do Docker, imagens mínimas, contêineres de bibliotecas em CI/CD e ambientes restritos. - Útil para verificações simples de porta, requisições HTTP GET básicas, port knocking, mensagens de controle UDP “fire-and-forget” e depuração pontual.
- Também é usado em testes de invasão e CTFs quando apenas um shell básico está disponível.
HTTP vs. TCP e limitações
- Vários comentaristas destacam que o Bash apenas abre TCP; o usuário está falando HTTP manualmente.
- Funciona para requisições HTTP/1.0/1.1 triviais, mas não lida de forma robusta com redirecionamentos, proxies, codificações ou análise completa de HTTP.
- HTTPS, HTTP/2 e HTTP/3 estão essencialmente fora de escopo; ferramentas como
curl,socat,openssl s_clientou bibliotecas apropriadas são recomendadas. - Usar isso como cliente HTTP de uso geral é descrito como frágil e “nível de brinquedo”.
Imagens mínimas / distroless e trade-offs de depuração
- Alguns defendem imagens extremamente mínimas ou
FROM scratch(muitas vezes com binários estaticamente ligados) para reduzir a superfície de CVEs e o ruído de conformidade. - Outros argumentam que omitir ferramentas básicas (
curl,coreutils, editor etc.) torna a depuração no mundo real desnecessariamente dolorosa. - As mitigações sugeridas incluem contêineres de debug/efêmeros,
kubectl debug,nsenter+ chroot e anexar ambientes separados e ricos em ferramentas. - O debate gira em torno de se os benefícios de segurança superam o atrito operacional e se isso realmente aborda a superfície de ataque real ou apenas os scanners de segurança.
Contexto histórico e conceitual
- Vários relembram falar manualmente protocolos (HTTP, SMTP, POP3, IRC) via
telnetou ferramentas similares; esse truque é visto como uma variante moderna. - O
/netdo Plan 9 e as APIs de rede do Go são mencionados como predecessores conceituais desse estilo de rede-como-arquivos.