
Gitea प्राधिकरण बायपास के लिए प्रूफ-ऑफ-कॉन्सेप्ट लैब, जहाँ केवल-सार्वजनिक PAT जिसमें write:organization है, POST /api/v1/orgs के माध्यम से एक निजी संगठन बनाता है।
abraxaslabs.tech · github.com/abraxas · @abraxas_null · [email protected] · gitea-public-only-pat-org
Gitea 1.27.3 - Gitea
PAT पर public-only का मतलब यह वादा होना चाहिए कि टोकन निजी संसाधनों को छू नहीं सकता। POST /user/repos में rejectPublicOnly है। POST /orgs में tokenRequiresScopes और reqToken हैं। इसमें rejectPublicOnly नहीं है। DEFAULT_ALLOW_CREATE_ORGANIZATION डिफ़ॉल्ट रूप से true है।
write:organization वाला public-only PAT एक निजी संगठन बनाता है। वही टोकन एक निजी उपयोगकर्ता रिपॉज़िटरी नहीं बना सकता।
| ID | अभी तक कोई CVE नहीं |
| CWE | CWE-863 |
| CVSS | Medium: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:H/A:N |
| Product | Gitea |
| Affected | v1.27.3 (146cc3e) तक |
| Auth | org write वाला public-only PAT |
| License | GNU Affero GPL v3.0 |
| Lab | केवल 127.0.0.1 |
चोरी हुए या अधिक-जारी किए गए public-only PAT का उपयोग करें जिसमें write:organization भी हो। एक निजी संगठन बनाएँ। वह org एक छिपने की जगह है जिसे टोकन को बनाने में सक्षम नहीं होना चाहिए था। वही टोकन अभी भी एक निजी उपयोगकर्ता रिपॉज़िटरी नहीं बना सकता, और यह बग किसी और के मौजूदा निजी git को नहीं खोलता।
Integrity, निजी-git डंप नहीं। उपयोगी तब जब पीड़ित ने जानबूझकर "public-only" जारी किया हो: CI, एक बॉट, एक ठेकेदार टोकन जिसे उन्होंने सोचा था कि एक निजी org नहीं बढ़ा सकता।
Org-repo create केवल org visibility की जाँच करता है। पदावनत POST /org/{org}/repos public-only को पूरी तरह छोड़ देता है। मैंने org create को lab किया। वही काफी है।
hostmatcher 0.0.0.0/8 lab के समान बचे हुए पास के रूप में: GHSA लहर के बाद v1.27.3, फिर वे हैंडलर जो अभी भी उस गेट को छोड़ देते हैं जो एक सहोदर के पास पहले से है। Visibility और token-scope बग उस लहर का एक विषय थे। मैंने api.go में rejectPublicOnly को grep किया। User-repo create में यह है। Org create में नहीं।
मैंने scopes public-only,write:organization,write:repository,write:user वाला एक PAT बनाया। Private org create ने 201 लौटाया। वही टोकन, private user-repo create, 403 this endpoint is not available for public-only tokens। वह 403 नियंत्रण है। यदि दोनों में 201 होता, तो middleware पूरी तरह गायब होता। यदि दोनों में 403 होता, तो दर्ज करने के लिए कुछ नहीं होता।
गलत मोड़ पहले से दर्ज: org HTTP 201 को पर्याप्त मानना (GET पर visibility=private की पुष्टि करें); private user-repo create सफल होना (तब rejectPublicOnly गया - lab को 403 की आवश्यकता है); मौजूदा निजी git सामग्री पढ़ना; एक reverse shell। नाटक।
cd lab
./run.sh
लक्ष्य केवल http://127.0.0.1:18132। Compose DEFAULT_ALLOW_CREATE_ORGANIZATION=true सेट करता है।
token-scopes=public-only,write:organization,write:repository,write:user
org-create status=201
org-visibility='private'
user-repo-create status=403 this endpoint is not available for public-only tokens
SUCCESS GITEA-PUBLIC-ONLY-PAT
POST /orgs पर rejectPublicOnly() लगाएँ, और org-repo create को भी public-only-संवेदनशील मानें। Public-only org create को उसी तरह 403 करना चाहिए जैसे private user-repo create पहले से करता है।
api.go (rejectPublicOnly, POST /orgs, POST /user/repos)GNU Affero GPL v3.0। LICENSE देखें। केवल Loopback lab। कोई वारंटी नहीं।