Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

FeedsContatoPrivacidade© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
vaultwarden-ip-header-spoof — Vaultwarden 1.37.3: X-Real-IP padrão trusted-local contorna os limites de taxa de login no Docker NAT | Kitploit
Ferramentas/GitHubGitHub/abraxas/vaultwarden-ip-header-spoof
Ferramentas DefensivasAtaques de SenhaAnálise de VulnerabilidadesExploraçãoSegurança WebTestes de PenetraçãoAutenticaçãoPapers e Pesquisa

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
GitHub
abraxas/vaultwarden-ip-header-spoof

vaultwarden-ip-header-spoof

Vaultwarden 1.37.3: X-Real-IP padrão trusted-local contorna os limites de taxa de login no Docker NAT

Ver Repositório
6há 13 diasAinda não revisado
Compartilhar

Abraxas Labs - vaultwarden-ip-header-spoof

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  vaultwarden-ip-header-spoof

vaultwarden-ip-header-spoof

Vaultwarden 1.37.3 - dani-garcia

O padrão IP_HEADER=X-Real-IP mais IP_HEADER_TRUSTED_PROXIES=local trata qualquer peer TCP não global como um proxy reverso. O NAT de porta publicada do Docker padrão é RFC1918. Um X-Real-IP fornecido pelo cliente torna-se a chave do rate-limit. Valores únicos nunca compartilham uma rajada.

IDsem CVE ainda
CWECWE-307 / CWE-290
CVSSAlto: 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
ProdutoVaultwarden
Afetado1.37.3 (eb212e23). Imagem vaultwarden/server:1.37.3. Docker published-port / userland-proxy / Desktop NAT, ou qualquer peer RFC1918.
Autenticaçãonão autenticado
LicençaGNU Affero GPL v3.0
Labapenas 127.0.0.1

O que um atacante pode fazer

O atacante remove a proteção de força bruta baseada em IP. Ele envia um X-Real-IP novo a cada tentativa. O governor é um DashMap com chave nesse endereço, então a rajada e o período nunca disparam.

  • Adivinhar senhas mestras sem um 429. POST /identity/connect/token password-grant. A rajada padrão é 10 por 60 segundos por IP. Headers únicos reiniciam o bucket.
  • Queimar os governors de email-2FA e admin-token da mesma forma. /api/two-factor/send-email-login, POST /admin, além de unauth hint / prelogin / delete-recover / auth-request / Send access, todos usam ClientIp como chave.
  • Alcançar o container através da porta publicada. docker run -p 80:80 padrão e compose 80:80 tornam o peer um endereço de bridge ou Desktop NAT. trusted=local é !is_global(peer). Isso corresponde.
  • 2FA após uma senha mestra correta ainda é executado. Isto são tentativas ilimitadas, não um bypass do segundo fator.

Um proxy reverso que substitui X-Real-IP pelo cliente real, e um bind de host cujo peer é um endereço global, ambos mantêm o governor honesto. A falha é o padrão mais uma porta publicada sem sobrescrita.

Como eu encontrei

Eu fixei dani-garcia/vaultwarden 1.37.3 (eb212e23) após os GHSAs de 1.35.x / 1.36.0 / 1.37.0. GHSA-c5rv colocou send-email-login em LIMITER_LOGIN. O que sobrou é como ClientIp é escolhido.

config.rs define ip_header como X-Real-IP por padrão e ip_header_trusted_proxies como local. auth.rs ip_header_is_trusted trata local como !is_global(remote). ratelimit.rs usa esse IpAddr como chave de LIMITER_LOGIN. Docker bridge, Desktop VM NAT e loopback são todos não globais.

Eu levantei o vaultwarden/server:1.37.3 padrão em loopback 127.0.0.1:18170:80 sem overwrite-proxy, mais uma segunda instância em 18171 com IP_HEADER=none. Registrei [email protected]. Password-grant com uma senha errada e sem header retornou 429 na requisição 11 (rajada 10). O mesmo grant com X-Real-IP: 198.51.100.{n} único por tentativa permaneceu HTTP 400 catorze vezes, zero 429s. Na instância none, 203.0.113.{n} únicos ainda retornaram 429 na 11.

SUCCESS VAULTWARDEN-IP-HEADER-SPOOF nohdr-429-at=11 spoof-400=14 spoof-429=0 none-429-at=11 VAULTWARDEN-IP-HEADER-SPOOF-WITNESS

Caminhos errados já registrados: a imagem 1.37.3 não era local, então o primeiro compose esperou por um pull; o primeiro /alive foi uma resposta vazia enquanto o Rocket fazia bind, depois 200 na espera 2; o JSON de registro dummy (masterPasswordHash + uma key curta) foi suficiente, sem retry de chave longa. Um reverse shell. Teatro. O oráculo é 429 sem o header e 400 com um único.

Lab

cd lab
./run.sh

Alvo apenas http://127.0.0.1:18170 (padrão) e http://127.0.0.1:18171 (IP_HEADER=none). Imagem vaultwarden/server:1.37.3.

A correção

Definir IP_HEADER como none por padrão, ou definir IP_HEADER_TRUSTED_PROXIES como uma lista vazia / CIDR de proxy explícito por padrão. local como "qualquer peer RFC1918" é o caso da porta publicada. A existência de um header de encaminhamento não é prova de um proxy.

Referências

  • github.com/dani-garcia/vaultwarden tag 1.37.3
  • src/config.rs (ip_header, ip_header_trusted_proxies)
  • src/auth.rs (ip_header_is_trusted, ClientIp)
  • src/ratelimit.rs
  • CWE-307

Licença

GNU Affero GPL v3.0

Baixar ferramenta