Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessCommit symlink to public repository
-
DeliverySubmit crafted blob URL to Gitingest
-
ExploitServer follows symlink in blob ingestion
-
ExecutionReads arbitrary file as service user
-
ImpactExfiltrate sensitive server file contents
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V5 - File Handling Symlink resolution safety
|
| Exploitation Conditions | The target Gitingest instance (version ≤0.3.1) must be network-reachable and must accept attacker-supplied repository/blob URLs for ingestion - which is the default operating mode of both the hosted service and self-hosted deployments. The specific trigger is the single-file blob ingestion path in ingest_query, which follows a symbolic link committed to a public repository rather than restricting reads to in-repo content. No authentication, credentials, or user interaction are required (PR:N/UI:N). Limiting factors: disclosure is bounded to files the service account can read and capped at 10 MB per request, exploitation requires the attacker to host the malicious symlink in a reachable public repo, and risk is confined to instances exposed to untrusted submitters - an internal-only instance behind access controls is far less exposed. |
| Impact | This is a credible, actionable priority rather than a high-CVSS paper tiger. The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:N/UI:N) describes network-reachable, low-complexity, fully unauthenticated exploitation with no user interaction, and the impact profile (VC:H, VI:N, VA:N) correctly reflects a pure confidentiality/arbitrary-file-read flaw (CWE-59 symlink following) with no integrity or availability impact. The signals are internally consistent: the description matches the vector - any anonymous user who can submit a repository blob URL to a Gitingest instance can read files the service account can access (up to 10 MB). No conflict exists between the vector and the description. The limiting factor on real-world blast radius is exposure: the risk is acute for the public hosted service and any internet-reachable self-hosted instance, but low for instances not exposed to untrusted submitters. Missing/absent signals should temper urgency ranking: there is no EPSS score, no CISA KEV listing, and no explicit POC flag in the input, so 'actively exploited' cannot be asserted. However, a detailed public technical writeup (hackmd) and a VulnCheck advisory exist, meaning the exploitation technique is fully disclosed and low-effort to reproduce - treat weaponization as imminent even though active exploitation is unconfirmed. |
| Exploit ScenarioDerived | An attacker creates or forks a public Git repository and commits a symbolic link pointing to a sensitive server path (e.g., /etc/passwd, application config, or cloud credential files). They then submit the blob URL of that symlink to an exposed Gitingest instance; the single-file blob ingestion path in ingest_query follows the link and returns the target file's contents. Because the CVSS vector is AV:N/AC:L/PR:N/UI:N, this requires no authentication, no user interaction, and only a single crafted request against a default-reachable instance; a public technical writeup detailing the method already exists. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Oct 14, 2026
Unauthenticated arbitrary file read in Gitingest 0.3.1 and earlier allows remote attackers to retrieve any file readable by the service account, in chunks capped at 10 MB per request, by committing a symbolic link into a public repository and submitting that symlink's blob URL to the single-file ingestion path in ingest_query. The server resolves the link and returns the target file's contents instead of confining reads to in-repo content, so a network-reachable instance that accepts untrusted repository or blob URLs - the default mode for both the hosted service and self-hosted deployments - is directly exposed with no credentials or user interaction required. There is no CISA KEV listing and no public exploit identified at time of analysis, though a public technical writeup describing the symlink technique accompanies the VulnCheck advisory; impact is bounded by the service account's file permissions and the 10 MB per-request cap.
RemediationAI
No vendor-released patch was identified in the available data at time of analysis, so the primary action is to upgrade Gitingest beyond 0.3.1 as soon as an upstream fix is published and to track the repository at https://github.com/coderamp-labs/gitingest plus the advisory at https://www.vulncheck.com/advisories/gitingest-through-0.3.1-arbitrary-file-read-via-symlink-in-blob-ingestion for a fixed release; the public writeup at https://hackmd.io/@hieuPenguinnn/gitingest-blob-symlink-arbitrary-file-read documents the exact trigger for verification. Until a fix lands, the most effective compensating control is to disable or block the single-file blob ingestion path in ingest_query so only full-repository ingestion is accepted - this closes the symlink vector entirely, at the cost of losing a convenience feature and requiring a code-level change that must be re-applied after upgrades. If blob ingestion must stay enabled, reject symlink entries before reading by checking git mode 120000 / lstat and refusing anything that is not a regular file resolved within the cloned repository root (opening with O_NOFOLLOW where feasible); the trade-off is that legitimate repositories containing symlinks will fail to ingest and the check must be comprehensive to avoid bypasses via nested or relative links. Run the service under a dedicated, unprivileged account inside a container or sandbox with a read-only root filesystem and no mounts exposing host secrets, environment files, or cloud credentials, which limits disclosure to the container's own contents; note this constrains but does not eliminate the leak, since application secrets still live in the service's namespace. Finally, place any instance behind authentication, rate limiting, and network access controls so untrusted submitters cannot reach the ingestion endpoint at all - the most reliable mitigation for deployments that do not need public input, though it is not viable for the public hosted service.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
Gitingest ingests Git repositories and individual blobs and returns their text content for downstream consumption (for example, building LLM prompts). CVE-2026-110767 is an instance of CWE-59, Improper Link Resolution Before File Access ('Link Following'), located in the single-file blob ingestion logic of ingest_query, referenced at line 75 of src/gitingest/ingestion.py. Git stores a symbolic link as a blob whose content is simply the link target path, and the vulnerable code path reads and returns the blob's resolved filesystem content rather than validating that the source is a regular in-repo file. Because the attacker controls the repository content, they control the symlink target, so the service opens whatever path the symlink names - including absolute paths such as /etc/passwd or the application's own configuration and environment files - as long as the Gitingest process user can read it. No CPE mapping was supplied in the source data; the only authoritative product identification is EUVD's affected range 'gitingest 0 ≤ 0.3.1' and the upstream repository coderamp-labs/gitingest. The assessed CVSS:3.1 vector AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N confirms a remote, unauthenticated, confidentiality-only impact with no integrity or availability effect, consistent with the CWE-59 information-disclosure classification.
Know when the next one hits your stack
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Unauthenticated network request against default config (PR:N/AC:L), attacker controls the submitted repo; pure arbitrary file read gives C:H with no integrity or availability impact and no scope change.
Primary rating from Vendor (vulncheck).
CVSS VectorVendor: vulncheck
DescriptionCVE.org
Gitingest through 0.3.1 contains a symlink following vulnerability in ingest_query single-file blob ingestion that allows unauthenticated attackers to read server files by submitting symlink blob URLs. Attackers can commit a symlink to a public repository and submit its blob URL, causing the server to return any file the service user can read, up to 10 MB.
Executive ViewAI
Gitingest 0.3.1 and earlier - a tool commonly used to turn code repositories into LLM-ready text - can be steered into returning files from outside the repository, exposing any file readable by the account the service runs as, in 10 MB chunks per request. Both the hosted service and self-hosted deployments are exposed in their default configuration, which accepts untrusted repository and blob URLs, and there is no public exploit identified at time of analysis and no vendor-released patch identified at time of analysis, so exposure persists until maintainers ship a fix. Any team running a network-reachable instance should assume its source code, configuration files, and any credentials stored alongside them may be retrievable by an outside party.
No vendor-released patch identified at time of analysis. Interim mitigations: allowlist the repository and blob URLs the service will accept so untrusted input never reaches ingest_query; disable or block the single-file ingestion path where not business-critical; run the service under a dedicated least-privilege account with no access to secrets, tokens, or credential stores; segment the instance away from sensitive internal networks; restrict outbound network access; and monitor for reads outside the repository root or anomalous multi-chunk retrieval patterns.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Information disclosure occurs when an application unintentionally exposes sensitive data that aids attackers in reconnaissance or directly compromises security.
EUVD-2026-101567
GHSA-cgrx-q63r-jf38
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB