Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
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.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2026-66917 — IDOR + XSS Armazenado via Autorização de Nível de Objeto Quebrada no JoomGallery | Kitploit
Ferramentas/GitHubGitHub/toanln-cov/cve-2026-66917
Autenticação e AutorizaçãoAnálise de VulnerabilidadesAnálise de CódigoExploraçãoExploração de Aplicações WebSegurança Web
GitHubtoanln-cov/cve-2026-66917

CVE-2026-66917

IDOR + XSS Armazenado via Autorização de Nível de Objeto Quebrada no JoomGallery

Ver Repositório
há 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

IDOR + XSS Armazenado via Autorização de Nível de Objeto Quebrada em JoomGallery

JoomGallery ≤ 4.3.0 — Usuário com Papel de Editor Sequestra Qualquer Imagem da Galeria e Armazena Payload XSS, Permitindo a Tomada de Sessão do Admin

CVE CVSS v4.0 CWE-639 CWE-79 Affected Researcher


RESUMO

UserimageController::save() no JoomGallery verifica checkACL('edit', ...) em vez de checkACL('edit.own', ...). Um usuário com papel de Editor pode fazer POST para task=userimage.save&id=N de qualquer imagem, independentemente da propriedade (IDOR — CWE-639). Como o papel de Editor carrega core.edit globalmente, a verificação de autorização passa para cada ID de imagem no site, incluindo imagens de propriedade dos administradores.

Combinado com a ausência de uma chamada $this->escape() no template de imagem do frontend, um Editor pode armazenar um payload XSS em qualquer título de imagem — inclusive imagens de propriedade do admin — causando a execução de JavaScript no navegador de todos os visitantes. Isso possibilita o sequestro completo da sessão do admin e o comprometimento de todo o site.


VERSÕES AFETADAS

COMPONENTVULNERÁVELTESTADO EMCORRIGIDO
JoomGallery (com_joomgallery)4.0.0 – 4.3.0Joomla 5.4.7 + JoomGallery 4.3.0-stable (PHP 8.2 / Apache)4.4.0

DETALHES DA VULNERABILIDADE

Tipo: Autorização de Nível de Objeto Quebrada / IDOR (CWE-639) encadeada com Cross-Site Scripting Armazenado (CWE-79) Autenticação necessária: Conta de Editor com privilégios baixos

Causa Raiz 1 — IDOR (CWE-639)

Arquivo: components/com_joomgallery/src/Controller/UserimageController.php

A ação save() realiza uma verificação de ACL usando a permissão edit em vez de edit.own. A permissão edit é concedida globalmente a todos os usuários com papel de Editor, portanto a verificação é bem-sucedida para qualquer ID de imagem, independentemente de quem a criou.

USERIMAGECONTROLLER.PHP — CÓDIGO VULNERÁVEL (LINHA 145)

root@kitploit:~
// Vulnerable
if (!$this->checkACL('edit', 'image', $recordId, $parent_id, true)) { ... }

Como core.edit é mantido globalmente pelo grupo Editor, a condição é avaliada como false para cada ID de imagem, concedendo acesso de escrita irrestrito. Em um salvamento bem-sucedido, o modelo também atualiza created_by para o ID de usuário do atacante, transferindo silenciosamente a propriedade da imagem para o atacante.

Causa Raiz 2 — XSS Armazenado (CWE-79)

Arquivo: components/com_joomgallery/tmpl/image/default.php

O template de imagem do frontend exibe $this->item->title sem codificação HTML no contexto do atributo alt. O filtro STRING do JInput do Joomla não remove caracteres de aspas duplas, portanto um payload contendo " escapa do atributo e injeta manipuladores de eventos arbitrários.

DEFAULT.PHP — CÓDIGO VULNERÁVEL (LINHAS 64, 78)

root@kitploit:~
// Vulnerable
item->title; ?>" ...>

O payload abc" onmouseover="alert(document.domain);" x=" é armazenado em jos_joomgallery.title e injetado cru no atributo HTML a cada renderização de página. Nenhuma sanitização ocorre na camada de armazenamento ou exibição.


PROVA DE CONCEITO

Visão Geral da Cadeia de Ataque

  1. O admin cria uma imagem na galeria (ID=3). Proprietário = Administrador. Publicada e Aprovada.
  2. O atacante faz login como Editor. Extrai o cookie de sessão e o token CSRF da página de login.
  3. O atacante obtém um novo token CSRF do componente JoomGallery.
  4. IDOR: O Editor faz POST para task=userimage.save&id=3 com o payload XSS em jform[title]. A verificação de ACL passa (core.edit, não edit.own). O servidor retorna HTTP 303 — não 403.
  5. O título é atualizado com o payload sem escape. created_by é transferido para o ID de usuário do atacante.
  6. O payload XSS é armazenado sem escape em jos_joomgallery.title.
  7. Qualquer visitante (ou admin) navega pelo frontend da galeria. O template renderiza alt="abc" onmouseover="alert(document.domain);". O XSS é acionado. A sessão do admin é capturada → comprometimento total do site.

1. Admin Cria Imagem na Galeria — Proprietário: Administrador, ID = 3

O admin cria admin_image pelo backend do JoomGallery (Joomla 5.4.7). A imagem é Publicada, Aprovada e de propriedade do Administrador

Step 1


2. Editor Extrai Token CSRF da Página de Login

GET /index.php/component/users/login — a resposta JSON contém "csrf.token":"a68c2b3a...". Token capturado para o POST de login subsequente.

Step 2


3. Editor Faz Login — HTTP 303, joomla_user_state=logged_in

POST /index.php/component/users/login com o token CSRF e as credenciais do Editor. Resposta: HTTP 303 e Set-Cookie: joomla_user_state=logged_in. Cookie de sessão capturado.

Step 3


4. Editor Extrai Novo Token CSRF do JoomGallery

GET /index.php?option=com_joomgallery com o cookie de sessão. A resposta contém um novo "csrf.token":"2d96934b..." para uso na requisição de salvamento.

Step 4


5. IDOR + Injeção de XSS — Servidor Aceita com HTTP 303

O Editor faz POST para option=com_joomgallery&task=userimage.save&id=3 com jform[title] definido como:

root@kitploit:~
abc" onmouseover="alert(document.domain);" x="

O servidor retorna HTTP 303 (não 403), confirmando o IDOR. O cabeçalho Location mostra o payload XSS na URL de redirecionamento, confirmando que o título foi aceito e salvo.

Step 5


6. Propriedade Transferida — Proprietário Alterado para Usuário Editor

O backend do JoomGallery mostra que a imagem ID=3 agora tem Proprietário: Editor User. O campo created_by foi silenciosamente atualizado no banco de dados durante o salvamento não autorizado.

Step 6


7. Banco de Dados Confirma Payload Armazenado sem Escape

A consulta SQL em jos_joomgallery confirma que o payload XSS está armazenado — " é armazenado como uma aspa dupla crua, não como ". Nenhuma sanitização ocorreu na camada de armazenamento.

Step 7


8. XSS é Acionado no Frontend da Galeria

Qualquer usuário que visite /index.php/component/joomgallery/gallery aciona o payload. O diálogo alert() do navegador confirma a execução de JavaScript na origem da vítima (document.domain).

Step 8


IMPACTO

  1. Modificação Não Autorizada de Imagens (IDOR): Um usuário com papel de Editor pode modificar qualquer imagem da galeria no site, incluindo imagens de propriedade dos administradores, sem validação de propriedade.
  2. Transferência Silenciosa de Propriedade: Cada salvamento não autorizado reatribui silenciosamente created_by ao atacante, alterando permanentemente a trilha de auditoria.
  3. XSS Armazenado — Execução Persistente: O payload JavaScript injetado executa no navegador de cada visitante a cada carregamento da página da galeria, afetando igualmente visitantes não autenticados e administradores.
  4. Sequestro de Sessão do Admin → Comprometimento Total do Site: Um script malicioso no atributo alt pode exfiltrar o cookie de sessão do administrador, concedendo ao atacante acesso total ao backend e controle sobre toda a instalação Joomla.
  5. Mudança de Escopo: O XSS executa na origem do navegador da vítima (CVSS S:C), cruzando o limite de confiança entre a sessão de baixo privilégio do atacante e a sessão de alto privilégio da vítima.

REFERÊNCIAS

  • CVE: https://www.cve.org/CVERecord?id=CVE-2026-66917
  • NVD: https://nvd.nist.gov/vuln/detail/CVE-2026-66917
  • Comunicado de Segurança do GitHub: https://github.com/advisories/GHSA-8vxv-gf52-gm5h
  • Repositório do Fornecedor: https://github.com/JoomGalleryfriends/JoomGallery
  • Nota de Nova Versão do Fornecedor: https://www.joomgalleryfriends.net/en/blog/joomgallery-4-en/joomgallery-4-4-0.html
Baixar ferramenta