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
stirling-h2-import-leftover — Stirling-PDF v3.2.0 - Crítico - Remoto - Resíduo de RUNSCRIPT no H2 - CREATE OR REPLACE ALIAS import-database | Kitploit
Ferramentas/GitHubGitHub/abraxas/stirling-h2-import-leftover
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebVirtualização para SegurançaTestes de PenetraçãoSegurança de Banco de Dados
GitHubabraxas/stirling-h2-import-leftover

stirling-h2-import-leftover

Stirling-PDF v3.2.0 - Crítico - Remoto - Resíduo de RUNSCRIPT no H2 - CREATE OR REPLACE ALIAS import-database

Ver Repositório
4há 1 diaAinda não revisado

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 →
Compartilhar

Abraxas Labs - stirling-h2-import-leftover

abraxaslabs.tech  ·  github.com/abraxas  ·  @abraxas_null  ·  [email protected]  ·  stirling-h2-import-leftover

stirling-h2-import-leftover

Stirling-PDF 3.2.0 - Stirling Tools

Classe: resíduo de RUNSCRIPT no H2 do GHSA-mrr8. Alcance: ROLE_ADMIN remoto.

POST /api/v1/database/import-database é @PreAuthorize("hasRole('ADMIN')"). validateSqlContent deveria bloquear CREATE ALIAS. A denylist é CREATE\s+(FORCE\s+)?ALIAS. O parseCreate do H2 permite OR REPLACE antes de ALIAS, então CREATE OR REPLACE ALIAS … FOR "java.lang.…" casa com a allowlist \bCREATE\b e escapa da denylist. O validador sanitiza uma cópia. verifyBackup e a produção executam RUNSCRIPT FROM ? no arquivo original.

GHSA-mrr8-934j-4g8m / CVE-2026-85714 fecharam as strings originais de FILE_READ / CREATE ALIAS / CSVWRITE. Este resíduo é a lacuna do OR REPLACE nesse mesmo validador.

Uma importação com ROLE_ADMIN cria um alias Java que a denylist deveria bloquear. Um download de backup posterior contém SQL do atacante. O RCE via FILE_READ / FileUtils no host, do advisory original, é inferido, não comprovado em laboratório neste pacote.

IDainda sem CVE
CWECWE-94 / CWE-184
CVSS9.1 CVSS:3.1/AV:N/AC:L/PR:H/UI:N/S:C/C:H/I:H/A:H
ProdutoStirling-PDF
Afetadov3.2.0 (a7e593728dd9aa81e75318a949789d3c2e9ee754), imagem stirlingtools/stirling-pdf:3.2.0-fat
AutenticaçãoROLE_ADMIN, H2 embutido padrão. Primeiro admin padrão admin / stirling até ser alterado
LicençaGNU Affero GPL v3.0
Labsomente 127.0.0.1:18152

Resíduo da série Stirling-PDF v3.2.0 leftovers. Irmão: stirling-storage-folder-idor (raiz de armazenamento implícita da pasta de processamento). Este pacote é o resíduo da importação H2.

O que um atacante pode fazer

ROLE_ADMIN no login-on proprietary/fat com o H2 embutido padrão. O primeiro admin padrão é admin / stirling quando initialLogin está vazio. Não é necessário acesso não autenticado. A imagem Lite e as fontes de dados PostgreSQL não incluem este controller.

Tabela de privilégios (exaustiva). Mesmo critério do Signal-Server Dropwizard admin: método + caminho, o que aquela chamada concede, reconhecimento vs integridade vs disponibilidade, comprovado em laboratório vs inferido, superfície adjacente que permanece fechada.

EixoMétodo + caminhoConcedeProveniência
IntegridadeROLE_ADMIN POST /api/v1/database/import-database com CREATE OR REPLACE ALIAS lab_nano FOR "java.lang.System.nanoTime" mais INSERT INTO lab_w VALUES('STIRLING-H2-IMPORT-WITNESS')200 importIntoDatabaseSuccessed. Alias Java criado. SQL do atacante confirmado sob RUNSCRIPTComprovado em laboratório
ReconROLE_ADMIN GET /api/v1/database/createDatabaseBackup e depois GET /api/v1/database/download/backup_202610172328.sqlBackup de 50432 bytes contém STIRLING-H2-IMPORT-WITNESSComprovado em laboratório
Recon / arquivo do hostmesma importação envolvendo FILE_READ('/etc/os-release') em EXECUTE IMMEDIATE500 Backup verification failed. Bytes do host não estão em um backupFalha extra em laboratório
Integridade / RCEalias org.h2.store.fs.FileUtils mais CSVWRITE de um .pth de user-site do Python, depois conversão do officeExecução de comando como a conta de serviçoInferido a partir de GHSA-mrr8. Não testado em laboratório aqui
Disponibilidadenada alegadoA importação pode substituir tabelas da aplicaçãoInferido. Não é o oráculo do laboratório

Permanece fechado nesta versão fixada

EixoMétodo + caminhoPor que está fechado
IntegridadePOST /api/v1/database/import-database sem autenticação401 Authentication required. A segurança de método ADMIN permanece ativa quando o HTTP é permitAll
Integridadeimportação ROLE_ADMIN de CREATE ALIAS puro500 SQL script contains disallowed operations and was rejected
Integridadeimagem lite / DISABLE_ADDITIONAL_FEATURESDatabaseController ausente
Integridadedatasource PostgreSQL personalizado@Conditional(H2SQLCondition.class)

Não estou alegando um reverse shell, e não estou alegando FILE_READ no host como comprovado em laboratório. O que resta é a falha na denylist que permite CREATE OR REPLACE ALIAS … FOR "java.lang.…" passar pelo RUNSCRIPT.

Como eu encontrei

A v3.2.0 ainda inclui o validador do GHSA-mrr8. Eu fiquei nessa tag e li DENIED_PATTERNS. A linha do alias é CREATE\s+(FORCE\s+)?ALIAS. O parser do H2 aceita CREATE OR REPLACE ALIAS. Os testes cobrem as strings óbvias CREATE ALIAS / FILE_READ(. Eles não cobrem OR REPLACE.

O laboratório faz login como admin padrão, conclui change-password-on-login, importa um CREATE ALIAS negado (500), depois importa CREATE OR REPLACE ALIAS mais um INSERT testemunha (200). Um download de backup contém a testemunha.

Caminhos errados: tratar a importação sem autenticação como dentro do escopo (401); tratar EXECUTE IMMEDIATE + FILE_READ como o que restou (verifyBackup 500); tratar o CREATE ALIAS original não ofuscado como ainda ativo (ele é negado).

Laboratório

python3 stirling-h2-import-leftover-Abraxas-Labs.py

ou

cd lab
./run.sh

Aponte apenas para http://127.0.0.1:18152. Imagem stirlingtools/stirling-pdf:3.2.0-fat. Docker necessário. Login ativado. O launcher faz chdir para lab/ e executa run.sh.

IOC unauth-import http=401
IOC negative-import http=500 ... disallowed operations ...
IOC leftover-import bypass=create-or-replace-alias http=200 ... importIntoDatabaseSuccessed
IOC download file=backup_202610172328.sql http=200 bytes=50432 witness=1
SUCCESS stirling-h2-import-leftover negative-denied=yes bypass=create-or-replace-alias backup-has-witness=yes file=backup_202610172328.sql unauth-import=401 STIRLING-H2-IMPORT-WITNESS

A correção

Estenda a denylist para que OR REPLACE não possa ficar entre CREATE e ALIAS. Execute validateSqlContent sobre os mesmos bytes que o RUNSCRIPT irá executar. Negue EXECUTE IMMEDIATE a menos que o SQL interno também seja escaneado.

Pattern.compile("(?i)\\bCREATE\\s+(OR\\s+REPLACE\\s+)?(FORCE\\s+)?ALIAS\\b")

Execute novamente o cliente de loopback contra uma build corrigida: a importação remanescente deve retornar 400/500 da mesma forma que o CREATE ALIAS puro já faz.

Baixar ferramenta