← voltar
CVE-2019-15107criticalsob ataqueransomwareCWE-78

CVE-2019-15107

100Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.

ssvc Actcvss 9.8epss 100%
da publicação à arma3 dias
Publicada no NVD16 de ago.
1ª PoC+3d
metasploit10 de ago.
CISA KEV+952d
probabilidade de exploração
100%top 1% das CVEs
exploração observada
simCISA + VulnCheck
86 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2022-04-15

Apply updates per vendor instructions.

Resumo

O parâmetro old de password_change.cgi no Webmin é passado sem sanitização para uma chamada de shell, permitindo injeção de comandos remota e não autenticada com privilégios de root. A origem não é um erro de programação comum: é um backdoor inserido por um atacante desconhecido na infraestrutura de build do projeto, presente apenas nos pacotes distribuídos via SourceForge — o código-fonte no GitHub nunca foi afetado. Está no catálogo KEV da CISA com exploração ativa confirmada, tem módulo Metasploit e PoC pública, mas a explorabilidade real depende de uma configuração específica não-padrão na maioria das versões.

Detalhamento técnico

A falha está em password_change.cgi, que envia a senha antiga informada pelo usuário para a função encrypt_password em acl/acl-lib.pl, que por sua vez chama unix_crypt para validar a senha atual contra o /etc/shadow. Nessa validação, o valor do parâmetro old é usado numa construção que executa comandos via shell sem escapar caracteres especiais — um caractere pipe (|) no valor de old é interpretado como separador de comando, caracterizando CWE-78 (OS Command Injection). O servidor nem chega a validar se o usuário ou a senha antiga estão corretos antes de processar o payload: o comando injetado é executado independentemente do resultado da autenticação.

A raiz do problema não foi um bug de código-fonte revisável, mas um comprometimento de supply chain: segundo o pesquisador que divulgou a falha (AkkuS, publicada na DEFCON AppSec Village), um atacante desconhecido inseriu instruções Perl (qx) no servidor de build do Webmin em duas ocasiões — abril de 2018, introduzindo o backdoor na release 1.890, e julho de 2018, reintroduzindo-o nas releases 1.900 a 1.920 (o desenvolvedor do módulo Metasploit cita a faixa 1.890–1.920). Somente os pacotes disponibilizados no SourceForge foram adulterados; os repositórios oficiais no GitHub do projeto não contêm o código malicioso.

O gatilho real da exploração depende do parâmetro miniserv{'passwd_mode'} em /etc/webmin/miniserv.conf. Quando esse valor é 2, o código correspondente a 'Prompt users with expired passwords to enter a new one' (Webmin Configuration > Authentication) está ativo e o fluxo vulnerável em password_change.cgi fica acessível sem autenticação prévia. Na versão 1.890 esse recurso já vem habilitado por padrão; nas versões 1.900 a 1.920 é preciso que o administrador tenha ativado essa opção manualmente — configuração que, segundo o próprio autor da descoberta, é usada por muitos administradores de Webmin.

Como é explorada

O vetor é uma requisição HTTP POST não autenticada para password_change.cgi, contendo no campo old um valor com um caractere pipe seguido do comando a executar (ex.: usuário|comando). O servidor processa esse valor na rotina de validação da senha antiga e executa o comando com os privilégios do processo Webmin, tipicamente root, antes mesmo de reportar falha de autenticação. Não é necessário conhecer usuário, senha ou token de sessão válidos — a exploração é pré-autenticação e de baixa complexidade, o que justifica CVSS 9.8.

A única pré-condição real, ausente na manchete e essencial para avaliar o risco, é o miniserv.conf com passwd_mode=2 habilitado (ou a instalação ser especificamente a versão 1.890, vulnerável por padrão). Ambientes com a troca de senha expirada desabilitada — que é a configuração padrão a partir da 1.900 — não são explorável por este vetor, mesmo rodando versão nominalmente listada como afetada.

Existe módulo Metasploit público (rank Excellent) e exploit no Exploit-DB (EDB-ID 47230) que automatizam a verificação de vulnerabilidade e a entrega de payload via cmd/unix/reverse_python, além de PoCs adicionais catalogadas no Packet Storm. A presença no catálogo KEV da CISA confirma exploração ativa em campo, o que torna esta CVE um alvo recorrente de varredura massiva contra instâncias Webmin expostas à internet.

Versões

Afetadas
Webmin <= 1.920, segundo a descrição oficial da CVE. Pesquisadores que analisaram o backdoor no build indicam a faixa 1.882 a 1.921 (pentest.com.tr / DEFCON), enquanto a descrição do módulo Metasploit cita 1.890 a 1.920 como afetadas pelo backdoor propriamente dito. A versão 1.890 é explorável em instalação padrão; as demais versões na faixa exigem passwd_mode=2 habilitado em miniserv.conf.
Corrigidas em
Webmin 1.930 corrige a vulnerabilidade, conforme indicado pelo pesquisador que divulgou a falha e pela página oficial de segurança do Webmin.

Como se proteger

A correção definitiva é atualizar para Webmin 1.930 ou versão posterior, que remove o código do backdoor. Segundo o próprio fornecedor, a atualização é fortemente recomendada independentemente da configuração de troca de senha estar habilitada ou não.

Se a atualização imediata não for possível em instalações nas versões 1.900 a 1.920, o fornecedor orienta editar /etc/webmin/miniserv.conf e remover/desabilitar a diretiva que ativa o passwd_mode=2 (correspondente à opção 'Prompt users with expired passwords to enter a new one' em Webmin Configuration > Authentication), eliminando o caminho de código vulnerável sem precisar substituir o binário. Esse paliativo tem custo funcional: usuários com senha expirada deixam de poder trocá-la pela própria interface web até a atualização ser aplicada. Para a versão 1.890, que vem vulnerável por padrão, não há paliativo de configuração equivalente documentado — a única mitigação efetiva é a atualização.

Restringir acesso de rede à porta do Webmin (por padrão 10000) para IPs confiáveis reduz a superfície de ataque, mas não elimina a vulnerabilidade nem substitui a atualização ou a correção de configuração — não deve ser tratado como mitigação suficiente isoladamente.

Como detectar

Em logs de acesso do Webmin/miniserv, procurar requisições POST para password_change.cgi originadas sem sessão autenticada válida, especialmente com o campo old contendo caracteres de shell como pipe (|), ponto e vírgula ou backticks — o valor esperado nesse campo é apenas a senha antiga em texto simples. Requisições repetidas com parâmetros user=root e expired=2 são um padrão característico dos exploits públicos conhecidos.

Como o vetor é pré-autenticação e o Metasploit inclui uma rotina de 'check' que envia um payload de teste (dir) antes da exploração real, tentativas de varredura tendem a gerar duas requisições sequenciais ao mesmo endpoint em curto intervalo. Ainda assim, não há assinatura de tráfego universalmente confiável além de inspecionar o conteúdo do parâmetro old — organizações sem WAF ou proxy inspecionando corpo de requisição HTTPS interna ao Webmin não terão visibilidade central desse tráfego.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
An issue was discovered in Webmin <=1.920. The parameter old in password_change.cgi contains a command injection vulnerability.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Produtos afetados
n/a · n/a
PoCs públicas encontradas86 VexDay Proof
cve_referenceVexDay Proofwww.exploit-db.com/exploits/47230exploitdbwww.exploit-db.com/exploits/47293não verificadogithubgithub.com/jas502n/CVE-2019-1510766githubgithub.com/MuirlandOracle/CVE-2019-1510756githubgithub.com/K3ysTr0K3R/CVE-2019-15107-EXPLOIT10githubgithub.com/hannob/webminex8githubgithub.com/n0obit4/Webmin_1.890-POC7githubgithub.com/ruthvikvegunta/CVE-2019-151076githubgithub.com/AdministratorGithub/CVE-2019-151075githubgithub.com/Mattb709/CVE-2019-15107-Scanner3githubgithub.com/whokilleddb/CVE-2019-151073githubgithub.com/NasrallahBaadi/CVE-2019-151073githubgithub.com/AleWong/WebminRCE-EXP-CVE-2019-15107-3githubgithub.com/squid22/Webmin_CVE-2019-151073githubgithub.com/wenruoya/CVE-2019-151072githubgithub.com/HACHp1/webmin_docker_and_exp2githubgithub.com/Rayferrufino/Make-and-Break1githubgithub.com/MasterCode112/CVE-2019-151071githubgithub.com/TheAlpha19/MiniExploit1githubgithub.com/Mattb709/CVE-2019-15107-Webmin-RCE-PoC1githubgithub.com/hacknotes/CVE-2019-15107-Exploit0githubgithub.com/darrenmartyn/CVE-2019-151070githubgithub.com/CyberTuz/CVE-2019-15107_detection0githubgithub.com/gozn/detect-CVE-2019-15107-by-pyshark0githubgithub.com/h4ck0rman/CVE-2019-151070githubgithub.com/olingo99/CVE-2019-151070githubgithub.com/0x4r2/Webmin-CVE-2019-151070githubgithub.com/adampawelczyk/cve-2019-151070githubgithub.com/ketlerd/CVE-2019-151070githubgithub.com/diegojuan/CVE-2019-151070githubgithub.com/hadrian3689/webmin_1.9200githubgithub.com/f0rkr/CVE-2019-151070githubgithub.com/psw01/CVE-2019-15107_webminRCE0githubgithub.com/g1vi/CVE-2019-151070githubgithub.com/viglia/cve-2019-151070githubgithub.com/ianxtianxt/CVE-2019-151070githubgithub.com/ch4ko/webmin_CVE-2019-151070githubgithub.com/cdedmondson/Modified-CVE-2019-151070githubgithub.com/D4rkScare/CVE-2019-151070githubgithub.com/EdouardosStav/CVE-2019-15107-RCE-WebMin0githubgithub.com/bayazid-bit/CVE-2019-151070githubgithub.com/ArtemCyberLab/Project-Exploitation-of-Webmin-Authentication-Vulnerability0githubgithub.com/jini135wii/CVE-2019-151070vulncheckvulncheck.com/xdb/86807142d202não verificadovulncheckvulncheck.com/xdb/36f3e23cc53anão verificadovulncheckvulncheck.com/xdb/346894239882não verificadovulncheckvulncheck.com/xdb/beaa095869bdnão verificadovulncheckvulncheck.com/xdb/50552f993bb1não verificadovulncheckvulncheck.com/xdb/a990debb490enão verificadovulncheckvulncheck.com/xdb/b745f18fe915não verificadovulncheckvulncheck.com/xdb/c4581c84425bnão verificadovulncheckvulncheck.com/xdb/481f4128612dnão verificadovulncheckvulncheck.com/xdb/645d8ca04538não verificadovulncheckvulncheck.com/xdb/bfb7ca362af4não verificadovulncheckvulncheck.com/xdb/0d2cd9698102não verificadovulncheckvulncheck.com/xdb/e5d9d10c9291não verificadovulncheckvulncheck.com/xdb/91ebdf06889enão verificadovulncheckvulncheck.com/xdb/660292b95806não verificadovulncheckvulncheck.com/xdb/8d9cadf4b346não verificadovulncheckvulncheck.com/xdb/323c8177e804não verificadovulncheckvulncheck.com/xdb/e6dd22bbd303não verificadovulncheckvulncheck.com/xdb/31a0904d05d9não verificadovulncheckvulncheck.com/xdb/2e9eb90806b3não verificadovulncheckvulncheck.com/xdb/4fd2ccb44e6cnão verificadocve_referencepacketstormsecurity.com/files/154141/Webmin-Remote-Comman-Execution.htmlnão verificadocve_referencepacketstormsecurity.com/files/154197/Webmin-1.920-password_change.cgi-Backdoor.htmlnão verificadocve_referencepacketstormsecurity.com/files/154485/Webmin-1.920-Remote-Code-Execution.htmlnão verificadovulncheckvulncheck.com/xdb/52c4d17f7d4anão verificadovulncheckvulncheck.com/xdb/90ca878ea23anão verificadocve_referencepacketstormsecurity.com/files/154141/Webmin-1.920-Remote-Command-Execution.htmlnão verificadovulncheckvulncheck.com/xdb/4c6823870c85não verificadovulncheckvulncheck.com/xdb/0d4e36cd4a95não verificadovulncheckvulncheck.com/xdb/9bbe351314fbnão verificadovulncheckvulncheck.com/xdb/a13dbcc678b1não verificadovulncheckvulncheck.com/xdb/c6da575a25d8não verificadovulncheckvulncheck.com/xdb/486adc8e3e40não verificadovulncheckvulncheck.com/xdb/20196945d3c2não verificadovulncheckvulncheck.com/xdb/c749357d2521não verificadovulncheckvulncheck.com/xdb/73c54650e7c3não verificadovulncheckvulncheck.com/xdb/e9a6c303fcfdnão verificadovulncheckvulncheck.com/xdb/908f11836959não verificadovulncheckvulncheck.com/xdb/075aff434240não verificadovulncheckvulncheck.com/xdb/a6c954e87af6não verificadovulncheckvulncheck.com/xdb/6d77d7695cd4não verificadovulncheckvulncheck.com/xdb/bc9b78848768não verificadovulncheckvulncheck.com/xdb/26ea3ae3926dnão verificado
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.