<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Gitea-Actions - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/tags/gitea-actions/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Tue, 21 Jul 2026 20:43:25 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/tags/gitea-actions/feed.xml" rel="self" type="application/rss+xml"/><item><title>Gitea Actions Fork Pull Request Approval Gate Bypass</title><link>https://feed.craftedsignal.io/briefs/2026-07-gitea-fork-pr-bypass/</link><pubDate>Tue, 21 Jul 2026 20:43:25 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-07-gitea-fork-pr-bypass/</guid><description>A vulnerability in Gitea Actions (versions v1.20.0 and later) allows an unprivileged attacker to permanently bypass the fork pull request approval gate for a repository after a single, initial workflow approval, enabling arbitrary shell command execution on the Gitea Actions runner without further maintainer interaction, leading to source code disclosure and potential system compromise.</description><content:encoded><![CDATA[<p>A critical logic flaw, identified as GITEA-2026-004, has been discovered in Gitea Actions affecting all versions v1.20.0 and later. This vulnerability allows an unprivileged Gitea user with the ability to fork a repository to bypass the intended approval mechanism for fork pull requests. The flawed logic, introduced in commit <code>edf98a2dc3</code> (February 24, 2023), mistakenly interprets a single approval of any workflow run from a contributor on a given repository as permanent, unconditional trust for that user on that repository. Consequently, after a repository administrator approves a single benign pull request's workflow from an attacker, all subsequent malicious pull requests from the same attacker on the same repository will automatically execute their workflows on the Gitea Actions runner without requiring any further maintainer intervention. This effectively grants the attacker arbitrary code execution capabilities on the runner, leading to potential source code disclosure, exfiltration of sensitive data, or broader system compromise.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>An attacker creates an unprivileged Gitea account on a self-hosted Gitea instance.</li>
<li>The attacker forks a target repository, typically a public project or one they wish to compromise.</li>
<li>The attacker submits a benign pull request (PR) from their fork to the target repository, triggering a Gitea Actions workflow. This PR's workflow is designed to appear harmless and gain initial approval.</li>
<li>A repository administrator reviews the benign PR and, unaware of the vulnerability, explicitly approves its workflow run.</li>
<li>Gitea's flawed <code>ifNeedApproval()</code> function (in <code>services/actions/notifier_helper.go</code>) records this approval as a permanent trust for the attacker's user ID on that repository by incrementing <code>approved_by</code> in the <code>action_run</code> table.</li>
<li>The attacker then creates a new branch in their fork and crafts a second, malicious pull request containing a harmful workflow file (e.g., executing shell commands like <code>curl</code>, <code>id</code>, <code>ls -la</code> to exfiltrate data or establish persistence).</li>
<li>Due to the previously recorded permanent trust, Gitea's approval gate is bypassed, and the malicious workflow is dispatched immediately to the configured Gitea Actions runner without any further interaction or explicit approval from the maintainer.</li>
<li>The Gitea Actions runner executes the malicious workflow, granting the attacker arbitrary shell execution, access to the cloned source code, environment variables (like a populated <code>GITHUB_TOKEN</code>), and outbound network connectivity, leading to various impacts.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>The successful exploitation of this vulnerability results in arbitrary code execution on the Gitea Actions runner environment. This gives attackers control over the CI compute resources with the ambient privileges of the runner (shell access, network connectivity, filesystem access). Observed consequences include the ability to execute arbitrary shell commands, access to a populated <code>GITHUB_TOKEN</code> which can be used to interact with the Gitea API, and source code disclosure from the cloned repository. Attackers can leverage this access to exfiltrate sensitive data, manipulate repository contents, compromise the runner infrastructure itself, or establish further footholds within the organization's network. While the number of affected instances is not specified, all self-hosted Gitea instances running v1.20.0 or later are potentially vulnerable, impacting any organization utilizing Gitea Actions for CI/CD.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>If possible, temporarily disable Gitea Actions for fork pull requests on sensitive repositories until a patch is available.</li>
<li>Implement a rigorous review process for any first-time contributor's pull request, including manual verification of workflow files and their potential impact, even if only a one-time approval is required.</li>
<li>Monitor Gitea application logs for <code>action_run</code> entries where <code>need_approval</code> is <code>false</code> but <code>approved_by</code> is <code>0</code> for new fork pull requests, which could indicate exploitation.</li>
<li>Monitor Gitea Actions runner activity for suspicious shell commands (e.g., <code>curl</code> to unusual destinations, <code>id</code>, <code>ls -la</code> in unexpected directories) originating from fork PR workflows, which would be visible in the runner's execution logs (<code>/api/v1/repos/{owner}/{repo}/actions/jobs/{job_id}/logs</code>).</li>
</ul>
]]></content:encoded><category domain="severity">critical</category><category domain="type">advisory</category><category>logic-bug</category><category>ci-cd</category><category>code-execution</category><category>privilege-escalation</category><category>gitea-actions</category></item><item><title>Gitea Actions Artifacts V4 HMAC Ambiguity Allows Cross-Repository Data Access</title><link>https://feed.craftedsignal.io/briefs/2026-07-gitea-actions-artifacts-v4-hmac-ambiguity/</link><pubDate>Tue, 21 Jul 2026 20:42:15 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-07-gitea-actions-artifacts-v4-hmac-ambiguity/</guid><description>A vulnerability in Gitea Actions Artifacts V4 allows authenticated attackers, with permission to run an Actions job, to bypass intended access controls by manipulating signed artifact URLs, enabling unauthorized reading of artifacts from other repositories or writing arbitrary data to other tasks' artifact staging areas, potentially leading to data exfiltration or integrity compromise.</description><content:encoded><![CDATA[<p>A critical vulnerability (GHSA-hg5r-vq93-9fv6) has been identified in Gitea Actions Artifacts V4 that allows an authenticated attacker to bypass access controls using specially crafted signed URLs. This flaw, present in Gitea versions from v1.22.6 through v1.26.1, arises because the HMAC signature for artifact URLs is generated by concatenating fields (such as <code>artifactName</code>, <code>taskID</code>, and <code>artifactID</code>) without proper delimiters or length-prefixing. An attacker with permissions to execute a Gitea Actions job can forge a signed URL to achieve two primary objectives: unauthorized cross-repository artifact reading (<code>DownloadArtifact</code> path) or unauthorized cross-task artifact staging write and metadata mutation (<code>UploadArtifact</code> path). The vulnerability permits access to private repository data or the injection of arbitrary data into other running tasks' artifact contexts, posing a significant risk to data confidentiality and integrity within affected Gitea instances.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>An attacker gains legitimate execution permissions within Gitea Actions to run a job.</li>
<li>The attacker creates their own Gitea Actions task, publishes an artifact, and obtains a legitimate signed URL for this attacker-controlled artifact.</li>
<li>The attacker crafts a new URL by manipulating the <code>artifactName</code>, <code>taskID</code>, and <code>artifactID</code> parameters within the signed URL, specifically choosing values (e.g., <code>artifactName=&quot;artifact-795-1&quot;</code>, <code>taskID=53</code>, <code>artifactID=48&lt;attacker artifact id&gt;</code>) that, when concatenated, produce the same HMAC input as the original legitimate URL.</li>
<li>The attacker, acting as an unauthenticated client, sends the forged URL as an HTTP GET request to the Gitea <code>/api/actions/artifactsv4/DownloadArtifact</code> endpoint to attempt data exfiltration.</li>
<li>Gitea's server-side <code>verifySignature()</code> function validates the HMAC of the forged URL as legitimate due to the underlying concatenation flaw.</li>
<li>The server then proceeds to resolve the artifact using the attacker-controlled <code>taskID</code> and <code>artifactName</code> from the URL, which now points to a target task or artifact in a different repository.</li>
<li>Gitea retrieves and serves the artifact from the targeted repository or task context to the attacker, leading to unauthorized cross-repository artifact data exposure. Alternatively, the attacker can send a forged PUT request to <code>/api/actions/artifactsv4/UploadArtifact</code> to write arbitrary data into another running task's artifact staging area and mutate its metadata.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation of this vulnerability can lead to severe consequences for organizations utilizing affected Gitea instances. Attackers can exfiltrate sensitive data from private repositories by reading artifacts belonging to other users or teams. Furthermore, the ability to write arbitrary data into another task's artifact staging area compromises data integrity, potentially allowing for injection of malicious code, corrupted build artifacts, or other integrity-damaging actions. While no active in-the-wild exploitation is reported, the vulnerability's impact is high (confidentiality and integrity), as demonstrated by the proof-of-concept allowing cross-repository private artifact disclosure and cross-context staging write with metadata mutation.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade Gitea instances to a patched version immediately to remediate GHSA-hg5r-vq93-9fv6.</li>
<li>Monitor Gitea access logs for unusual download or upload patterns involving the <code>/api/actions/artifactsv4/DownloadArtifact</code> and <code>/api/actions/artifactsv4/UploadArtifact</code> endpoints, especially for unauthenticated requests or requests with unusual <code>taskID</code> or <code>artifactID</code> patterns in the query string.</li>
<li>Implement strong authentication and authorization policies for Gitea Actions job execution to limit potential attackers' initial access.</li>
</ul>
]]></content:encoded><category domain="severity">critical</category><category domain="type">threat</category><category>hmac-spoofing</category><category>data-exfiltration</category><category>supply-chain</category><category>gitea-actions</category></item></channel></rss>