Cockpit CMS 0.13.0 Multi-Endpoint Injection Scanner
Cockpit CMS 0.13.0 Multi-Endpoint Injection Scanner
Cockpit CMS 0.13.0 Multi-Endpoint Injection Scanner

=============================================================================================================================================
| # Title Cockpit CMS 0.13.0 Multi-Endpoint Injection Scanner

=============================================================================================================================================
| # Title : Cockpit CMS 0.13.0 Multi-Endpoint Injection Scanner |
| # Author : indoushka |
| # Tested on : windows 11 Fr(Pro) / browser : Mozilla firefox 147.0.1 (64 bits) |
| # Vendor : https://getcockpit.com/ |
=============================================================================================================================================

[+] References :

[+] Summary : This tool is a defensive security scanner designed to safely assess web application endpoints for potential input-validation and injection weaknesses without executing any commands.
It sends non-executable canary payloads through different request formats (form-encoded and JSON),
analyzes HTTP responses for error indicators and abnormal behavior, and reports potential issues.
The scanner is intended for authorized security testing, code review, and educational purposes, providing risk signals rather than exploitation.

[+] PoC : python3 poc.py

#!/usr/bin/env python3
import requests
import sys
import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

def scan(target_url):
endpoints = [
("/auth/check", "form"),
("/accounts/save", "json_account"),
("/api/collections/findOne", "json_filter")
]

payloads = [
"'",
"\"",
"' OR '1'='1",
"${TEST}",
"{{7*7}}",
"INVALID_INPUT_TEST"
]

findings = []

for endpoint, mode in endpoints:
for payload in payloads:
try:
url = target_url.rstrip("/") + endpoint

if mode == "form":
response = requests.post(
url,
data={"auth[user]": payload},
timeout=10,
verify=False
)
elif mode == "json_account":
response = requests.post(
url,
json={"account": {"_id": payload}},
timeout=10,
verify=False
)
else:
response = requests.post(
url,
json={"filter": {"_id": payload}},
timeout=10,
verify=False
)

indicator = analyze_response(response)

if indicator:
findings.append({
"endpoint": endpoint,
"payload": payload,
"status": response.status_code,
"indicator": indicator
})
print(f"[!] Potential issue at {endpoint} with payload: {payload}")

except Exception as e:
print(f"[-] Error scanning {endpoint}: {e}")

return findings

def analyze_response(response):
indicators = [
"exception",
"error",
"syntax",
"unexpected",
"undefined",
"stack",
"trace"
]

body = response.text.lower()

for i in indicators:
if i in body:
return f"Response contains indicator: {i}"

if response.status_code >= 500:
return "Server error (5xx)"

return None

if __name__ == "__main__":
if len(sys.argv) != 2:
print(f"Usage: {sys.argv[0]} <TARGET_URL>")
print(f"Example: {sys.argv[0]} https://example.com")
sys.exit(1)

results = scan(sys.argv[1])

print("\n=== Scan Summary ===")
if not results:
print("No obvious injection indicators detected.")
else:
for r in results:
print(f"- Endpoint: {r['endpoint']}")
print(f" Payload: {r['payload']}")
print(f" Status: {r['status']}")
print(f" Indicator: {r['indicator']}\n")



Greetings to :============================================================
jericho * Larry W. Cashdollar * r00t * Malvuln (John Page aka hyp3rlinx)*|
==========================================================================
Social Media Share
About Contact Terms of Use Privacy Policy
© Khalil Shreateh — Cybersecurity Researcher & White-Hat Hacker — Palestine 🇵🇸
All content is for educational purposes only. Unauthorized use of any information on this site is strictly prohibited.