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/port e /dev/udp/host/port que abrem sockets TCP/UDP.
  • Este é um recurso do Bash (e historicamente do KornShell), não POSIX; dash e 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 /net do 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, nc ou telnet nã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_client ou 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 telnet ou ferramentas similares; esse truque é visto como uma variante moderna.
  • O /net do Plan 9 e as APIs de rede do Go são mencionados como predecessores conceituais desse estilo de rede-como-arquivos.