CVE-2026-45721

Source
https://cve.org/CVERecord?id=CVE-2026-45721
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-45721.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-45721
Aliases
Published
2026-05-26T16:34:49.985Z
Modified
2026-07-15T01:48:50.156456231Z
Severity
  • 9.0 (Critical) CVSS_V3 - CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:H CVSS Calculator
Summary
Algernon: handler.lua discovery walks parent directories above the server root
Details

Algernon is a small self-contained pure-Go web server. Prior to 1.17.7, when Algernon is asked for any URL path that resolves to a directory without an index file, DirPage walks upward through parent directories — past the configured server root — looking for a file named handler.lua to execute as the request handler. The loop terminates only after 100 ancestor steps or when filepath.Dir returns ., so on any absolute server-root path the search reaches the filesystem root (/ on Unix, drive letter on Windows). The first handler.lua it finds is loaded into the Lua interpreter with the full Algernon API exposed — including run3(), httpclient, os.execute, io.popen, PQ, MSSQL, raw filesystem access, and the userstate database. Any process that can write handler.lua anywhere in a parent directory of the server root obtains pre-authenticated remote code execution on the next HTTP request. This is reachable without authentication — the lookup happens before the permission check returns a hit (the perm system only gates URL prefixes, not the handler-resolution step), and any URL pointing at a directory without an index triggers the walk. On a fresh stock Algernon install the request GET / is enough. This vulnerability is fixed in 1.17.7.

Database specific
{
    "cwe_ids": [
        "CWE-20",
        "CWE-426",
        "CWE-552"
    ],
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/45xxx/CVE-2026-45721.json",
    "cna_assigner": "GitHub_M"
}
References

Affected packages

Git / github.com/xyproto/algernon

Affected ranges

Type
GIT
Repo
https://github.com/xyproto/algernon
Events
Introduced
0 Unknown introduced commit / All previous commits are affected
Fixed
Database specific
{
    "extracted_events": [
        {
            "introduced": "0"
        },
        {
            "fixed": "1.17.7"
        }
    ],
    "source": "AFFECTED_FIELD"
}

Affected versions

0.*
0.2
0.3
0.4
0.41
0.42
0.43
0.44
0.45
0.46
0.47
0.48
0.49
0.50
0.51
0.52
0.53
0.54
0.55
0.56
0.57
0.58
0.59
0.61
0.62
0.63
0.64
0.65
0.66
0.67
0.68
0.7
0.71
0.72
0.73
0.74
0.75
0.8
0.81
0.82
0.83
0.84
0.85
0.86
0.87
0.88
0.89
0.9
0.91
0.92
1.*
1.0
1.1
1.10
1.10.1
1.11.0
1.12.0
1.12.0-TLS-1.3
1.12.1
1.12.10
1.12.11
1.12.12
1.12.14
1.12.2
1.12.3
1.12.4
1.12.5
1.12.6
1.12.7
1.12.8
1.12.9
1.2
1.2.1
1.3
1.3.1
1.3.2
1.4
1.4.1
1.4.2
1.4.3
1.4.4
1.4.5
1.5
1.5.1
1.5.1-static-linux64
1.6
1.7
1.8
1.9
v0.*
v0.47-win8-64
v0.52-win8-64
v0.62-win8-64
v0.84-win8-64
v0.85-win8-64
Other
v1
v1.*
v1.0-win8-64
v1.13.0
v1.14.0
v1.15.0
v1.15.1
v1.15.2
v1.15.3
v1.15.4
v1.15.5
v1.16.0
v1.17.0
v1.17.1
v1.17.2
v1.17.3
v1.17.4
v1.17.5
v1.17.6
v1.2.1-win8-64
v1.4.1-rpi3
v1.4.1-win8-64
v1.4.5-win8-64
v1.5

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-45721.json"