☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Gitea logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 6.5 CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H 🐛 CWE-400
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2026-63021

CVE-2026-63021 Denial of Service in Gitea
📅 PUBLISHED: 2026-10-14 00:00 UTC 🔄 UPDATED: 2026-10-15 11:48 UTC
[ ZERO-DAY / UNPATCHED ] [ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🥷 MITRE: T1499
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
Country: Global License: Open Source
VULNERABLE: Unknown (no fixed version identified; all releases exposing the Swift package registry are potentially affected)
CVSS VECTOR BREAKDOWN 6.5
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: L Privileges Required Low
UI: N User Interaction None
S: U Scope Unchanged
C: N Confidentiality None
I: N Integrity None
A: H Availability High
6.5
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2026-63021 is an uncontrolled resource consumption (CWE-400) vulnerability in Gitea's Swift package parser. The parser enforces a 128 KiB per-manifest size limit but does not limit the number of manifests or their combined size before loading them into memory. An authenticated user holding package-publish permission can upload a highly compressed archive containing many manifests, forcing memory allocations far larger than the uploaded archive and exhausting server memory, terminating the process, or causing request failures. No public exploit, PoC, or patch currently exists, and the issue remains unpatched as of this report.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Technical Analysis

The flaw resides in the component of Gitea responsible for parsing Swift Package Manager manifests during a package publish operation. According to the NVD description, the parser validates each individual manifest against a fixed ceiling of 128 KiB, but applies no control over two other dimensions of the input: the count of manifests within a single archive, and the aggregate size of all manifests once decompressed. The 128 KiB check is therefore a per-item guard rather than a whole-request guard, and the code proceeds to read manifests into memory without a global upper bound.

This is a classic decompression-and-aggregation amplification pattern. The attacker submits a compressed archive (for example, a zip or tarball) whose compressed size is small but whose expanded contents contain a very large number of manifest files, each individually under the 128 KiB per-manifest limit. Because the limit is evaluated per file, every manifest passes validation. The parser then materializes each manifest in memory, and the sum of those allocations is orders of magnitude larger than the size of the uploaded archive. The amplification ratio is attacker-controlled: it is governed by how many manifests are packed into the archive and how compressible their contents are.

The root cause is the absence of two missing controls: a maximum manifest count and a maximum aggregate (post-decompression) byte budget. CWE-400 (Uncontrolled Resource Consumption) captures this precisely — input that is large in effect but small in transmission defeats a size check applied at the wrong granularity. The CVSS vector confirms the access model: AV:N (network reachable), AC:L (no special conditions), PR:L (authenticated, low privilege), UI:N (no victim interaction), S:U (scope unchanged), C:N/I:N (no confidentiality or integrity impact), A:H (high availability impact). The high availability subscore reflects the fact that successful exploitation degrades or destroys the service's ability to respond, not merely that it consumes a transient resource spike.

Two boundaries matter for defenders. First, the vulnerability requires authenticated access with package-publish permission — it is not a pre-authentication flaw, so the exposed population is the set of users who can push packages to a given Gitea instance, and the blast radius is the Gitea server itself. Second, the impact is availability-only according to the CVSS vector; no memory disclosure, corruption, or code execution is described. The exploitation outcome is a denial-of-service condition: memory exhaustion, process termination (which can take down the Go process serving the request), or cascading request failures for other users on the same instance.

No specific function names, class names, file paths, or API endpoints are disclosed in the available intelligence beyond the general description of the Swift package parser and the package-publish workflow. No public proof-of-concept, exploit code, or Nuclei template exists. The technical picture above is derived strictly from the NVD description and the assigned CWE class; where the description is silent, this report deliberately does not speculate about implementation identifiers.

Exploitation Scenarios

  1. Reconnaissance and target identification. The attacker identifies a reachable Gitea instance, for example via Shodan (http.title:"Gitea" or the characteristic "Powered by Gitea" page body), and confirms that the Swift package registry feature is enabled and reachable. The attacker then obtains or already possesses an account with package-publish permission, which is the single hard prerequisite for exploitation. This makes the flaw most attractive in shared, multi-tenant, or CI/CD-integrated Gitea deployments where many contributors hold publish rights.

  2. Triggering the specific flaw class. The attacker crafts a compressed archive containing a very large number of Swift package manifests. Each manifest is sized below the 128 KiB per-manifest ceiling so that it individually satisfies the parser's check. The archive is deliberately structured for high compression, so the on-the-wire upload is small while the decompressed manifest set is enormous. The attacker submits this archive through the authenticated package-publish path for the Swift package type.

  3. Payload and execution at the vulnerability-class level. Because the parser enforces no limit on manifest count or aggregate size, it reads every manifest into memory. The attacker's payload is not code execution — it is volume. The allocation footprint scales with the number of manifests, and the attacker can tune that number to exceed the instance's available memory or the resource ceiling imposed by the host or orchestrator. No public PoC is available; the attack chain is inferred from the described vulnerability class (uncontrolled resource consumption via missing aggregate limits).

  4. Post-exploitation impact. Once allocations exceed available memory, the Gitea process can be terminated by the kernel OOM killer or crash, and concurrent requests from legitimate users fail. Depending on deployment topology — single binary, containerized pod, or a shared instance — the denial of service can be scoped to a single process, a pod, or the entire instance for all tenants. Recovery may require a restart, and repeat submissions by an authenticated attacker make the condition persistent rather than a one-time outage.

Impact Assessment

Business impact is availability-focused. A successful attack can render a Gitea instance unavailable to all users, blocking source browsing, issue tracking, CI/CD fetches, and package resolution that depends on the same service. Because package registries frequently sit on the critical path of build pipelines, an outage can halt software delivery across dependent projects, not merely disrupt individual developers.

Blast radius is bounded by the authentication requirement but is amplified by the CVSS subscores. AV:N means the attack arrives over the network; AC:L and UI:N mean no unusual preconditions or victim action are needed; PR:L means any low-privileged authenticated user with publish rights qualifies, which in typical organizations includes many maintainers and automated service accounts. S:U indicates the impact stays within the vulnerable component's security scope. C:N and I:N confirm no data exposure or tampering is claimed; A:H confirms a serious availability loss. The overall CVSS 3.1 base score is 6.5 (Medium). EPSS has not yet been scored by FIRST.org, so no exploitation-probability estimate can be stated. CVE-2026-63021 is not listed in CISA KEV.

A secondary operational risk is that the attacker is authenticated, so the activity appears in logs under a legitimate-looking account and may be mistaken for a large legitimate package push. In environments where package-publish permission is broadly granted — for example, shared CI runners or service accounts with weak scoping — the practical pool of potential attackers widens considerably.

Detection Guidance

Sigma Rule

title: Gitea Swift Package Publish Memory Exhaustion Attempt
id: 7c1f9e42-2b6a-4d18-9f03-5a2e6c8d1f77
status: experimental
description: Detects abnormal memory growth and manifest-density patterns during Swift package publishes on Gitea consistent with CVE-2026-63021.
references:
  - https://nvd.nist.gov/vuln/detail/CVE-2026-63021
author: Valters IT Threat Intelligence
date: 2026/01/01
logsource:
  product: gitea
  service: audit
detection:
  selection_event:
    event.action:
      - 'package_created'
      - 'package_publish'
    package.type: 'swift'
  selection_size:
    - http.request.body_size|<10240
  selection_mem:
    - memory.growth_mb|>512
  timeframe: 5m
  condition: selection_event and (selection_size or selection_mem)
fields:
  - user.name
  - source.ip
  - package.name
  - package.type
  - http.request.body_size
falsepositives:
  - Legitimate large Swift package releases
  - CI/CD bulk publish jobs
level: medium
tags:
  - attack.impact
  - attack.t1499

YARA Rule

rule CVE_2026_63021_Gitea_Swift_Manifest_Bomb
{
    meta:
        description = "Detects archives containing an excessive number of small Swift manifests consistent with CVE-2026-63021 resource exhaustion"
        author = "Valters IT Threat Intelligence"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2026-63021"
        date = "2026-01-01"
        severity = "medium"
    strings:
        $m1 = "swift-tools-version" ascii nocase
        $m2 = "Package.swift" ascii
        $m3 = "// swift-tools-version" ascii
        $zip = { 50 4B 03 04 }
        $gz  = { 1F 8B 08 }
    condition:
        ($zip at 0 or $gz at 0) and
        (#m1 + #m2 + #m3) > 200
}

Suricata IDS Rule

alert http any any -> any any (msg:"CVE-2026-63021 Gitea Swift Package Manifest Exhaustion Attempt"; flow:established,to_server; http.method; content:"PUT"; http.uri; content:"/api/packages/"; nocase; http.uri; content:"swift"; nocase; http.request_body; content:"Package.swift"; nocase; pcre:"/Package\.swift/Ri"; threshold:type both, track by_src, count 50, seconds 60; classtype:attempted-dos; reference:cve,2026-63021; reference:url,nvd.nist.gov/vuln/detail/CVE-2026-63021; sid:202663021; rev:1;)

Elastic Detection

sequence by user.name with maxspan=5m
  [ audit where event.action == "package_publish" and package.type == "swift" ]
  [ audit where event.action in ("package_publish", "package_create") and package.type == "swift" ]

Splunk SPL Query

index=gitea sourcetype=gitea:audit action=package_publish package.type=swift
| eval body_kb=round(request_body_size/1024,2)
| stats count sum(body_kb) as total_kb values(package_name) as packages by user, src_ip
| where count > 20 OR total_kb > 5000
| sort - total_kb
| table user src_ip count total_kb packages

Wazuh OSSEC Rule

<group name="gitea,cve-2026-63021,">
  <rule id="100321" level="8">
    <decoded_as>json</decoded_as>
    <field name="event.action">package_publish</field>
    <field name="package.type">swift</field>
    <field name="http.request.body_size">^\.?[0-9]{0,4}$</field>
    <description>CVE-2026-63021: Small Swift package archive with high manifest density published to Gitea</description>
    <mitre>
      <id>T1499</id>
    </mitre>
    <group>dos,</group>
  </rule>
  <rule id="100322" level="12" frequency="50" timeframe="60">
    <if_matched_sid>100321</if_matched_sid>
    <same_source_ip />
    <description>CVE-2026-63021: Repeated Swift manifest uploads from same source - possible memory exhaustion attack</description>
    <mitre>
      <id>T1499</id>
    </mitre>
    <group>dos,</group>
  </rule>
</group>

Mitigation & Patch Guidance

Patch confidence is 0/4. No vendor fix, workaround, or fixed-version reference has been published or tracked by any source. The vulnerability is UNPATCHED and organizations must rely on mitigation and compensating controls until a fix is available.

  1. Immediate mitigations. Restrict package-publish permission to the smallest possible set of trusted accounts and service identities, removing it from broad contributor groups. Apply a reverse proxy request-body size limit at the edge (for example, cap uploads on the package API path well below the maximum archive size that can realistically be harmful). Enforce memory and CPU limits on the Gitea process or container so that a single abusive request cannot exhaust host memory, and configure an OOM-handling policy that isolates rather than propagates the failure. Monitor Gitea process memory and restart-on-OOM events as a leading indicator. Where the Swift package registry feature is not needed, disable it entirely.

  2. Patch and upgrade steps. Monitor the Gitea project's security advisories and release notes for a version that introduces a manifest-count or aggregate-size limit in the Swift package parser. There is currently no fixed version to target. When a patched release is published, validate it in a staging environment, then upgrade, and confirm the new limit behavior by re-testing a controlled high-manifest-density archive against the patched instance.

  3. Long-term hardening. Enforce resource governance at every layer: container memory limits, per-request body caps, rate limiting on package-publish endpoints keyed by user and source IP, and audit logging of package-publish events including archive size and manifest count where obtainable. Adopt least-privilege scoping for CI/CD service accounts that hold publish rights. Periodically review which users and automation hold package-publish permission, and treat that permission as security-sensitive.

References

No public exploit code, proof-of-concept, or Nuclei template exists for this CVE, and no exploit-in-the-wild evidence or threat actor campaign has been attributed. CVE-2026-63021 is not listed in CISA KEV. No EPSS score has been assigned by FIRST.org at the time of writing.

👁️ SHODAN DORKS (THREAT HUNTING)

What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.

product:"Gitea"
title:"Gitea"
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2026-63021/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.