PoC Archive PoC Archive
Critical (per vendor advisory) CVE-2026-44277 patched

FortiAuthenticator Unauthenticated RCE Endpoint Probe (CVE-2026-44277)

by Ashraf Zaryouh (@0xBlackash) · 2026-07-05

Severity
Critical (per vendor advisory)
CVE
CVE-2026-44277
Category
web
Affected product
Fortinet FortiAuthenticator
Affected versions
6.5.0 - 6.5.6, 6.6.0 - 6.6.8, 8.0.0 - 8.0.2 (fixed in 6.5.7+, 6.6.9+, 8.0.3+; FortiAuthenticator Cloud not affected)
Disclosed
2026-07-05
Patch status
patched

Metadata

FieldValue
Date Added2026-07-05
Last Updated2026-05
Author / ResearcherAshraf Zaryouh (@0xBlackash)
CVE / AdvisoryCVE-2026-44277
Categoryweb
SeverityCritical (per vendor advisory)
CVSS ScoreN/A (see advisory)
StatusPoC
Tagsfortinet, fortiauthenticator, unauthenticated-rce, api, endpoint-probe, detection
RelatedN/A

Affected Target

FieldValue
Software / SystemFortinet FortiAuthenticator
Versions Affected6.5.0 - 6.5.6, 6.6.0 - 6.6.8, 8.0.0 - 8.0.2 (fixed in 6.5.7+, 6.6.9+, 8.0.3+; FortiAuthenticator Cloud not affected)
Language / PlatformFortinet appliance, HTTP/HTTPS management & API interface
Authentication RequiredNo (per advisory — improper access control on API endpoints)
Network Access RequiredYes — HTTP(S) access to the FortiAuthenticator API/admin interface

Summary

CVE-2026-44277 is described by the vendor/advisory as an unauthenticated remote code execution vulnerability in Fortinet FortiAuthenticator, caused by improper access control on specific API endpoints. The included script is a reconnaissance/detection tool only: it probes a small set of candidate API paths (/api/v1/aaa, /api/v1/fortiauth, /api/v1/config, /api/v1/backup, /api/v1/import) to determine whether they are reachable and flags reachable endpoints as “potentially vulnerable.” It explicitly does not include a working RCE payload — the author notes this is withheld “for safety.” Treat this repo as an exposure/reachability checker for the advisory, not a full working exploit chain.


Vulnerability Details

Root Cause

Per the advisory, specific FortiAuthenticator API endpoints lack proper access control, allowing unauthenticated requests to reach functionality that should require authentication, ultimately enabling remote code execution. The exact vulnerable endpoint, request method, and payload structure that achieve code execution are not disclosed in this repository.

Attack Vector

  1. Attacker identifies a reachable FortiAuthenticator instance (e.g. via Shodan/FOFA dork app="Fortinet-FortiAuthenticator" or "FortiAuthenticator" port:443).
  2. Attacker (or this script) sends unauthenticated GET requests to a list of candidate /api/v1/* paths.
  3. Endpoints returning HTTP 200/403/500 with a non-trivial response body are flagged as reachable and “potentially vulnerable.”
  4. The actual RCE trigger (payload/endpoint/method that achieves code execution) is not included in this PoC.

Impact

If exploited per the advisory, this would allow full unauthenticated compromise of the FortiAuthenticator appliance, with potential lateral movement into AD/RADIUS/SAML-integrated environments. As shipped, this specific script only establishes whether the advertised API surface is exposed — it does not itself achieve code execution.


Environment / Lab Setup

No lab/target is bundled. Point the script at a FortiAuthenticator instance you are
authorized to test:

  python3 CVE-2026-44277.py http://target-ip

Proof of Concept

PoC Script

See CVE-2026-44277.py in this folder.

1
python3 CVE-2026-44277.py http://target-ip

Running the script prints, per candidate endpoint, whether it is reachable (HTTP 200/403/500 with a substantial body) and labels reachable ones as potentially vulnerable. It ends with an explicit note that full RCE requires a specific payload not included in the script, and a reminder to patch to 6.5.7 / 6.6.9 / 8.0.3 or later.


Detection & Indicators of Compromise

- Unauthenticated HTTP requests from a single source to /api/v1/aaa, /api/v1/fortiauth,
  /api/v1/config, /api/v1/backup, /api/v1/import in rapid succession — consistent with
  this scanner or similar reconnaissance.
- Any successful unauthenticated access to these endpoints in FortiAuthenticator's own
  access/audit logs.

Signs of compromise:

  • Unexpected admin/API activity (config changes, backup/import operations) not tied to a known authenticated session.
  • New or modified accounts, RADIUS/SAML configuration, or scheduled tasks on the appliance.
  • Outbound connections or process activity from the FortiAuthenticator appliance inconsistent with its normal role.

Remediation

ActionDetail
Primary fixUpgrade FortiAuthenticator to 6.5.7+, 6.6.9+, or 8.0.3+ per the vendor advisory.
Interim mitigationRestrict access to the FortiAuthenticator admin/API interface to trusted networks (VPN + IP allowlist) and disable unnecessary API access until patched.

References


Notes

Mirrored from https://github.com/0xBlackash/CVE-2026-44277 on 2026-07-05. The upstream repository provides only an endpoint-reachability probe, not a functional RCE trigger; the author states the actual exploit payload was withheld.

CVE-2026-44277.py
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#!/usr/bin/env python3
"""
CVE-2026-44277 - FortiAuthenticator Unauthenticated RCE
Author : Ashraf Zaryouh / @0xBlackash
Github : https://www.github.com/0xBlackash/CVE-2026-44277
"""

import requests
import sys
import time
from colorama import init, Fore, Style

init(autoreset=True)

def banner():
    print(f"""{Fore.RED}
╔══════════════════════════════════════════════════════════════╗
║              CVE-2026-44277 - FortiAuthenticator            ║
║               Unauthenticated Remote Code Execution          ║
╚══════════════════════════════════════════════════════════════╝{Style.RESET_ALL}""")

def check_target(target):
    print(f"{Fore.CYAN}[*] Targeting: {target}{Style.RESET_ALL}\n")
    
    paths = [
        "/api/v1/aaa",
        "/api/v1/fortiauth",
        "/api/v1/config",
        "/api/v1/backup",
        "/api/v1/import"
    ]
    
    headers = {
        "User-Agent": "Mozilla/5.0 (CVE-2026-44277 PoC)",
        "Accept": "application/json"
    }

    for path in paths:
        try:
            url = target.rstrip("/") + path
            print(f"[*] Testing → {path}", end=" ")
            
            r = requests.get(url, headers=headers, timeout=8, verify=False, allow_redirects=True)
            
            if r.status_code in [200, 403, 500] and len(r.text) > 50:
                print(f"{Fore.GREEN}→ Reachable{Style.RESET_ALL}")
                print(f"{Fore.RED}[!!] Potential vulnerable endpoint found!{Style.RESET_ALL}")
                print(f"    Status: {r.status_code} | Length: {len(r.text)}")
            else:
                print(f"{Fore.YELLOW}{r.status_code}{Style.RESET_ALL}")
                
        except Exception as e:
            print(f"{Fore.RED}→ Error{Style.RESET_ALL}")

    print(f"\n{Fore.YELLOW}[!] Note: This is a detection PoC.{Style.RESET_ALL}")
    print(f"{Fore.YELLOW}    Full RCE requires specific payload not included for safety.{Style.RESET_ALL}")

if __name__ == "__main__":
    banner()
    
    if len(sys.argv) < 2:
        print("Usage: python3 CVE-2026-44277.py <http://target>")
        print("Example: python3 CVE-2026-44277.py http://192.168.1.50")
        sys.exit(1)

    target = sys.argv[1]
    check_target(target)
    
    print(f"\n{Fore.RED}[!] Update FortiAuthenticator to 6.5.7 / 6.6.9 / 8.0.3 or newer immediately.{Style.RESET_ALL}")