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
liferay-ga4-rce-research — Security research on Liferay CE 7.0.3 GA4: pre-auth RCE as root (CVE-2020-7961 class) reproduced end-to-end, plus 16 more findings — 8+ with no known CVE. Agentic loop-hunt: 25 generators, 22 judges, 9 live validators on Docker. Evidence trail + one-go checker included. | Kitploit
Ferramentas/GitHubGitHub/dinosn/liferay-ga4-rce-research
Dynamic Analysis (Sandboxing)Vulnerability AnalysisExploitationScripting & AutomationWeb Application ExploitationWeb SecurityPenetration TestingPapers & ResearchRed Teaming

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
GitHubdinosn/liferay-ga4-rce-research

liferay-ga4-rce-research

Security research on Liferay CE 7.0.3 GA4: pre-auth RCE as root (CVE-2020-7961 class) reproduced end-to-end, plus 16 more findings — 8+ with no known CVE. Agentic loop-hunt: 25 generators, 22 judges, 9 live validators on Docker. Evidence trail + one-go checker included.

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

Liferay CE 7.0.3 GA4 — Pesquisa de Vulnerabilidades (RAPTOR Loop-Hunt)

Uma auditoria de segurança do Liferay Portal CE 7.0.3 GA4 (git tag 7.0.3-ga4, commit b2d7cc68a) realizada com a metodologia RAPTOR loop-hunt: reconhecimento determinístico → 25 agentes geradores isolados lendo o código-fonte bruto → 22 agentes juízes independentes refutando a partir do código bruto → 9 validadores ao vivo atacando uma instância GA4 real no Docker.

Destaque: RCE não autenticado como root reproduzido de ponta a ponta (classe CVE-2020-7961), além de mais 8 vulnerabilidades verificadas ao vivo — várias delas sem CVE conhecido.

⚠️ Legal/ético: tudo aqui tem como alvo uma instância de teste auto-hospedada. O Liferay CE 7.0 está em fim de vida (última versão 7.0.6 GA7, 2018); esses problemas não têm correção upstream. Use este material apenas contra sistemas que você possui ou que está explicitamente autorizado a testar.


Você provavelmente está procurando por https://github.com/dinosn/liferay-ga4-rce-research/blob/main/tools/liferay_ga4_check.py :)

Descobertas em resumo

Status: ✅ verificado ao vivo contra a instância GA4 no Docker · 🔬 confirmado por código (juiz independente re-derivou o rastreamento completo a partir do código-fonte bruto) · 🧪 requer/condicionado à configuração.

Lista completa curada com rejeições: FINDINGS.md · relatório narrativo: REPORT.md


Novos vs. conhecidos — comparação de CVEs

Catálogo de ~50 problemas conhecidos do Liferay 7.0.x usado como conhecimento prévio: PRIOR-ART.md (varredura OSV [email protected], varredura NVD, avisos da Code White / CERT-EU).

"Novo" = nenhum CVE correspondente localizado nos avisos OSV/NVD/Liferay até 2026-07; as descobertas não foram submetidas para atribuição de CVE (a linha de produto está em EOL).

CVEs conhecidos confirmados no GA4, mas não re-testados ao vivo

CVE-2020-15840 (bypass do filtro de URL com codificação dupla), CVE-2024-8980 + CVE-2025-43748 (CSRF → RCE no console de script), CVE-2021-33335 (tomada de conta de admin da empresa — o GA4 é o limite inferior da faixa afetada), CVE-2017-1000425 (XSS no flash.jsp), CVE-2021-29040 (erros JSONWS verbosos), CVE-2022-41414 / CVE-2023-33949 (padrões de enumeração/registro), CVE-2025-62261 (tokens de redefinição em texto puro — o NVD cita diretamente o 7.0.3 GA4). Veja PRIOR-ART.md.


O processo (RAPTOR loop-hunt)

Registro: TRIED.md (tudo o que foi tentado, incl. 3 fatias secas documentadas) · INVENTORY.md (denominador de cobertura) · ambiente/fixtures: ENV.md


Reproduza localmente com Docker

Não existe imagem oficial liferay/portal:7.0.3-ga4; portanto, crie a imagem a partir do bundle oficial:

root@kitploit:~
# Dockerfile
FROM openjdk:8-jdk
RUN apt-get update && apt-get install -y --no-install-recommends unzip curl \
 && rm -rf /var/lib/apt/lists/*
RUN curl -sSL -o /tmp/liferay.zip \
    "https://downloads.sourceforge.net/project/lportal/Liferay%20Portal/7.0.3%20GA4/liferay-ce-portal-tomcat-7.0-ga4-20170613175008905.zip" \
 && unzip -q /tmp/liferay.zip -d /opt \
 && mv /opt/liferay-ce-portal-7.0-ga4 /opt/liferay \
 && rm /tmp/liferay.zip
EXPOSE 8080 11311
CMD ["/opt/liferay/tomcat-8.0.32/bin/catalina.sh", "run"]
root@kitploit:~
docker build -t liferay-ga4 .
docker run -d --name liferay-ga4 -p 8080:8080 liferay-ga4

# first boot takes several minutes — wait for it:
until [ "$(curl -s -o /dev/null -w '%{http_code}' http://localhost:8080/)" = 200 ]; do sleep 10; done

Em seguida, conclua o assistente de configuração única em http://localhost:8080/ (banco HSQL padrão; o assistente define a senha de administrador para [email protected]).

Execute o validador de uma vez só

tools/liferay_ga4_check.py é um script Python 3 de arquivo único, apenas com stdlib — aponte-o para qualquer instância GA4 e ele testa todas as descobertas verificadas ao vivo:

root@kitploit:~
# passive validation of all findings (safe, no payloads detonated)
python3 tools/liferay_ga4_check.py http://localhost:8080

# with an account (self-registration is on by default) for the poller sink test
python3 tools/liferay_ga4_check.py http://localhost:8080 --user [email protected] --password '***'

# full RCE proof (opt-in): drops a SELF-DELETING JSP via the deserialization file-write
# gadget and fetches the command output; adjust --web-root to your install
python3 tools/liferay_ga4_check.py http://localhost:8080 --rce \
    --web-root /opt/liferay/tomcat-8.0.32/webapps/ROOT

Saída esperada em uma instalação GA4 padrão: 9 descobertas VULNERABLE (F-1, F-1+RCE, F-2, F-4, F-5*, F-8, F-11, F-12, F-13*) além da F-10 confirmada não vulnerável (a barreira do tunnel se mantém). *F-5 e F-13 exigem parâmetros de fixture (--leg-uuid/--version-id, --wcd-page/--group-id/--article-id) — veja --help.

O gadget de desserialização é gerado em Python puro dentro do script (verificado byte a byte contra o payload AspectJWeaver do ysoserial usado no engajamento) — sem necessidade de Java, jars ou ysoserial.


Verificado como sólido (para você calibrar o restante)

Tickets de redefinição de senha (UUID de 128 bits, uso único, 24 h), renovação de sessão no login por ticket, cookie remember-me AES-128 com chave SecureRandom por empresa, hash PBKDF2 padrão, a pilha XML de todo o portal (entidades externas desabilitadas por padrão), gates de digest do WebDAV/SharePoint, bloqueios de IP localhost em /api/axis|/api/liferay|/api/atom, validação de caminho de upload, proteções contra traversal em /combo /sprite, gating de omni-admin no console de script e na UI web do Gogo.

Declaração de cobertura e limitações

A cobertura foi rastreada por componente contra o inventário completo (TRIED.md). Não cobertos: análise função por função em toda a árvore de 4 GB (apenas âncoras Semgrep), a maior parte de modules/apps fora de foundation/web-experience em nível de arquivo, a pesquisa de gadget do F-2, testes ao vivo com configuração não padrão (F-9/F-14) e a alcançabilidade de CVEs da dependência PDFBox 2.0.3. O loop foi pausado para o relatório, não porque se esgotou.

Baixar ferramenta
IDDescobertaGravidadeAutenticaçãoStatusEvidência
F-1Sobrescrita de tipo JSONWS → instanciação arbitrária de classes + setters → RCE como root (c3p0 HexAsciiSerializedMap → ObjectInputStream → AspectJWeaver file-write → JSP)Críticonenhuma✅verified/f1-jsonws-deser-rce.md
F-2/poller/* dica de javaClass do jabsorb → instanciação arbitrária de classes + injeção de campos, antes da validação do userIdAlto (potencial)qualquer conta (auto-registro ativado por padrão)✅ sink / vetor de RCE abertoverified/F-2-poller.md
F-4XML-RPC pingback.ping busca-antes-de-validar → SSRF cego + oráculo de porta interna (alcançou o shell Gogo em 127.0.0.1:11311)Médionenhuma✅verified/f4-xmlrpc-pingback-ssrf.md
F-5SyncDownloadServlet IDOR de versionId → lê qualquer versão de arquivo DL (cross-site, sem verificação VIEW no objeto transmitido)Altonenhuma (via "leg" visível a convidados)✅verified/F-5.md
F-6O mecanismo de template XSL ignora o sandboxing (secureProcessing=false, restricted descartado) → SSRF via document() e execução de comandos via XSLTC rt:execCríticoautor de template do site✅verified/F-6-F-7-template-engines.md
F-7Templates restritos do Velocity e do FreeMarker expõem propsUtil / saxReaderUtil brutos → divulgação de propriedades do portal + file:// para convidadosAltoautor de template✅verified/F-6-F-7-template-engines.md
F-8IDOR na tabela Image_ via /image/*?img_id=N — sem token, verificações com escopo de prefixo contornadas por troca de prefixo, ids sequenciais enumeráveisMédionenhuma✅verified/f-8-image-idor.md
F-11SimpleCaptcha = PIN de 4 dígitos, nunca invalidado em tentativas erradas, contador de convidados nunca é incrementado → quebra em ~5 mil requisiçõesMédionenhuma✅verified/f11-f12-captcha-reminder.md
F-12Recuperação de senha: enumeração de usuários + oráculo de resposta de lembrete sem captcha (bypass por sessão nova); resposta vazia dispara um ticket de redefinição real para contas sem pergunta de lembreteMédio-Altonenhuma✅verified/f11-f12-captcha-reminder.md
F-13Substituição de parâmetro de requisição no Web Content Display (groupId/articleId/ddmTemplateKey) → leitura cross-site de artigos não destinados a convidados (journal.article.view.permission.check.enabled=false por padrão)Altonenhuma (requer um WCD em uma página de convidado)✅verified/F-13-wcd-param-override.md
F-3O axis-extender do OSGi ignora a ServiceAccessPolicy / a marcação de acesso remoto em serviços SOAP de módulosMédio (Alto com módulo WSDD)nenhuma🔬judge/axis-spring-remoting.md
F-9O OpenID vincula a conta da vítima ao OpenID do atacante antes da verificação da asserção → tomada de contaAltonenhuma (OpenID ativado, não padrão)🔬 🧪judge/sso-autologin.md
F-10readObject do TunnelServlet protegido apenas por uma blacklist de classes; gadgets ROME/JdbcRowSetImpl/c3p0/AspectJWeaver no classpathPotencial críticopeer confiável (segredo compartilhado + host permitido)✅ barreiras se mantêm pré-autenticaçãoverified/f10-f20-tunnel-auth-pipeline.md
F-14O TokenAutoLogin confia em um cabeçalho SM_USER puro (sem verificação, sem allowlist de IP)Médionenhuma (token SSO ativado, não padrão)🔬 🧪judge/sso-autologin.md
F-15A importação de LAR por admin do site contrabandeia RolesAdminPortletDataHandler → exclusão em massa de papéis da empresa / limpeza de permissõesMédioadmin do site🔬judge/export-import-lar.md
F-16OpenSocial (não está no bundle padrão): SSRF makeRequest pré-autenticação, JS de origem /gadgets/ifr, tokens de segurança forjáveis → personificação, XSS armazenadoAlto ×4nenhuma / membro do site🔬 (condicional ao deployment)judge/opensocial-shindig.md
F-17WSRP (não está no bundle padrão): SSRF ProxyServlet pré-autenticação; endpoint de markup → renderização arbitrária de portlet + persistência de typeSettings do layoutMédionenhuma🔬 (condicional ao deployment)judge/wsrp.md
DescobertaCVE conhecido?Relação
F-1 RCE por desserialização JSONWSCVE-2020-7961 (CISA KEV, explorado ativamente)Reprodução + re-derivação independente. Confirmado sem correção no GA4; cadeia completa comprovada com um gadget de escrita de arquivo AspectJWeaver (PoCs públicos normalmente usam JdbcRowSetImpl JNDI).
F-10 readObject do TunnelServletCVE-2020-15842 (correspondência de classe)Classe conhecida. Proteção de desserialização apenas por blacklist confirmada; barreiras pré-autenticação verificadas ao vivo (não explorável sem segredo compartilhado/host permitido).
F-7 escape de propsUtil em templateCVE-2020-13445 (injeção de template, FreeMarker/Velocity)Variante. Mesma classe de bug (a API de template não restringe objetos sensíveis), mecanismo diferente: objetos PropsImpl/saxReaderUtil brutos expostos dentro do contexto restrito.
F-12 (metade de enumeração)CVE-2021-33321 (login.secure.forgot.password=false)Padrão inseguro conhecido — confirmado de forma independente ao vivo.
F-12 (oráculo + ticket de redefinição por resposta vazia)nenhum encontradoNovo. Bypass de captcha por JSESSIONID novo na etapa 2; answer vazio cria um ticket de redefinição válido por 24 h para contas sem pergunta de lembrete, sem nenhum conhecimento do segredo.
F-11 força bruta no SimpleCaptchanenhum encontrado (CVE-2019-6588 é um problema de captcha diferente — XSS)Novo. PIN de 4 dígitos + sem invalidação + bypass do contador de convidados.
F-2 desserialização jabsorb no pollernenhum encontradoNovo. Sink confirmado ao vivo; a armamentização é bloqueada pela injeção de campos do LiferaySerializer (pesquisa em aberto).
F-4 oráculo de SSRF via pingbacknenhum encontradoNovo.
F-5 IDOR de versionId no syncnenhum encontradoNovo.
F-6 RCE no mecanismo XSLnenhum encontrado (CVE-2020-13445 cobre apenas FreeMarker/Velocity)Novo. O mecanismo XSL ficou de fora de toda correção anterior de injeção de template.
F-8 IDOR em Image_nenhum encontradoNovo.
F-13 leitura cross-site no WCDnenhum encontradoNovo. Causa raiz é um padrão inseguro (journal.article.view.permission.check.enabled=false) além de um novo caminho de entrega (substituição de parâmetro de requisição do portlet).
F-3 bypass de SAP no axis-extendernenhum encontradoNovo.
F-9 vínculo do OpenID antes da verificaçãonenhum encontradoNovo.
F-14 confiança no cabeçalho SM_USERnenhum encontradoNovo.
F-15 contrabando de data-handler de papéis no LARnenhum encontradoNovo.
F-16 / F-17 OpenSocial / WSRPnenhum encontradoNovo, mas os módulos não estão no bundle GA4 padrão (Liferay-Releng-Bundle: false).
EtapaO que foi executadoSaída
0 — determinísticoauditoria de dependências do raptor-sca (727 deps), 17 regras Semgrep (1,098 âncoras), modelo de ameaças, manifesto de entrypoints a partir do web.xml, catálogo de CVEs de conhecimento prévioSCA.md SEMGREP.md THREAT-MODEL.md ENTRYPOINTS.md PRIOR-ART.md
1 — geração25 agentes isolados, um por fatia de componente × lente de classe de bug, raciocinando apenas a partir do código-fonte bruto (sem resumos anteriores — anti-ancoragem)45 candidatos em candidates/
2 — julgamento22 agentes independentes refutando cada candidato a partir do código bruto; para refutar é preciso evidência visível no código ("não presuma que a camada invisível é segura")judge/
3 — verificação ao vivo9 agentes atacando a instância GA4 no Docker; cada alegação apoiada por requisição/resposta capturadas; limpeza obrigatóriaverified/