
CVE-2026-22874 रिपोर्ट: Gitea वेबहुक/माइग्रेशन में अपूर्ण SSRF अनुमति-सूची (IPv6 संक्रमण और क्लाउड मेटाडेटा)। Gitea 1.26.3 में ठीक किया गया।
CVE-2026-22874 (GHSA-2r5c-gw76-rh3w) के लिए तकनीकी विवरण और संदर्भ: Gitea के वेबहुक डिलीवरी और रिपॉजिटरी माइग्रेशन में एक अधूरी SSRF अनुमति-सूची, जिसे Gitea 1.26.3 में ठीक किया गया।
मैंने इस SSRF श्रेणी की सूचना स्वतंत्र रूप से Gitea अनुरक्षकों को दी और प्रकाशित एडवाइज़री पर योगदानकर्ता (other) के रूप में श्रेय प्राप्त किया; एडवाइज़री का प्राथमिक रिपोर्टर J. Leitschuh है। यह रिपॉजिटरी सार्वजनिक एडवाइज़री का एक रक्षात्मक, शैक्षिक विवरण है — यह मुद्दा ठीक कर दिया गया है।
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:N)<= 1.26.2 — ठीक किया गया: 1.26.3Gitea की डिफ़ॉल्ट SSRF अनुमति-सूची (MatchBuiltinExternal, जो वेबहुक डिलीवरी और रिपॉजिटरी माइग्रेशन दोनों में उपयोग होती है) Go मानक पुस्तकालय के net.IP.IsPrivate() पर निर्भर करती है, जो केवल RFC 1918 (10/8, 172.16/12, 192.168/16) और RFC 4193 (fc00::/7) को पहचानती है। क्लाउड मेटाडेटा सेवाओं, आंतरिक नेटवर्कों और IPv6 संक्रमण तंत्रों के लिए सामान्यतः उपयोग किए जाने वाले कई एड्रेस रेंज उस परिभाषा के अनुसार "private" नहीं हैं और इसलिए "external" फ़िल्टर को पार कर गए, जिससे एक प्रमाणित उपयोगकर्ता सर्वर से उन गंतव्यों पर HTTP अनुरोध भेजवा सकता था।
चूँकि वेबहुक डिलीवरी प्रतिक्रिया स्थिति, हेडर और ~1 MiB तक की बॉडी रिकॉर्ड करती है और उसे वेबहुक इतिहास UI में प्रदर्शित करती है, यह SSRF ब्लाइंड नहीं है: हमलावर पढ़ सकता है कि लक्षित आंतरिक सेवा क्या लौटाती है।
net.IP.IsPrivate() द्वारा छूटी गई रेंज| रेंज | अर्थ |
|---|---|
100.64.0.0/10 | RFC 6598 कैरियर-ग्रेड NAT |
168.63.129.16/32 | Azure WireServer / इंस्टेंस मेटाडेटा एंडपॉइंट |
64:ff9b::/96 | RFC 6052 NAT64 (169.254.169.254 को एम्बेड कर सकता है, जैसे AWS IMDS) |
2001::/32 | RFC 4380 Teredo |
2002::/16 | RFC 3056 6to4 |
उपरोक्त के IPv4-मैप्ड IPv6 रूप भी उसी प्रकार प्रभावित होते हैं।
इसलिए एक प्रमाणित उपयोगकर्ता जो वेबहुक बना या संशोधित कर सकता है (या माइग्रेशन शुरू कर सकता है), क्लाउड मेटाडेटा एंडपॉइंट्स तक पहुँच सकता है — उदाहरण के लिए NAT64 मैपिंग के माध्यम से AWS IMDS, या 168.63.129.16 पर Azure WireServer — और केवल-आंतरिक सेवाओं तक, फिर वेबहुक इतिहास दृश्य के माध्यम से प्रतिक्रिया पढ़ सकता है।
डिफ़ॉल्ट नीति Gitea की HostMatchList जाँच में MatchBuiltinExternal है, जो किसी भी वैश्विक-यूनिकास्ट, गैर-IsPrivate() एड्रेस को अनुमत मानती थी:
case MatchBuiltinExternal:
if ip.IsGlobalUnicast() && !ip.IsPrivate() {
return true
}
net.IP.IsPrivate() "external" के लिए सुरक्षा सीमा नहीं है: यह कैरियर-ग्रेड NAT, क्लाउड मेटाडेटा एंडपॉइंट्स, या IPv6 संक्रमण रेंजों को ध्यान में नहीं रखती जो आंतरिक या मेटाडेटा गंतव्यों तक रूट की जा सकती हैं।
Gitea 1.26.3 में उपरोक्त अतिरिक्त रेंजों को ब्लॉक करने के लिए अंतर्निहित फ़िल्टर का विस्तार करके ठीक किया गया। ऑपरेटरों को 1.26.3 या बाद के संस्करण में अपग्रेड करना चाहिए। रक्षा-गहराई के रूप में: