CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2025-68671

Groundhog Day in the Data Lake: Replaying lakeFS Requests Forever (CVE-2025-68671)

Alon Barad
Alon Barad
Software Engineer

Feb 18, 2026·6 min read·32 visits

Executive Summary (TL;DR)

lakeFS < 1.75.0 ignored the timestamp in S3-compatible requests. If an attacker captured a valid request (e.g., from logs or a proxy), they could replay it weeks or months later to execute the same action. This breaks the fundamental replay protection of the AWS SigV4 protocol.

lakeFS, the 'Git for data' platform, suffered from a critical oversight in its S3 Gateway authentication logic. By failing to validate the timestamps on AWS Signature Version 4 (SigV4) requests, the system allowed attackers to capture and replay authenticated API calls indefinitely. This vulnerability turns a momentary network capture into a permanent backdoor, allowing unauthorized data manipulation or exfiltration long after the original request was made.

The Hook: Git for Data, Amnesia for Time

lakeFS is an excellent tool for data engineers. It treats your object storage (S3, Azure Blob, GCS) like a Git repository, allowing you to branch, commit, and merge terabytes of data. To make integration easy, it exposes an S3-compatible gateway. This means you can point your standard AWS CLI, boto3 scripts, or Spark jobs at lakeFS, and they just work. It's magic.

But here is the thing about emulating S3: you have to actually emulate the security protocols, not just the API endpoints. AWS Signature Version 4 (SigV4) is a beast of a protocol involving canonicalization, HMAC-SHA256 hashing, and scoped signing keys. It is designed to be robust. However, cryptography is brittle. You can get the complex math perfectly right—hashing the payload, signing the headers—but if you miss one logical check, the whole castle collapses.

In CVE-2025-68671, the lakeFS team got the math right but failed the history class. They verified that the signature matched the secret key, but they forgot to check when the signature was generated. In the world of distributed systems, if you don't check the clock, you are doomed to repeat the past—literally.

The Flaw: A Signature Without a Shelf Life

Let's talk about Replay Attacks. In a standard authentication protocol, we prevent bad actors from recording a valid request and sending it again later by using two main mechanisms: Nonces (number used once) or Timestamps.

AWS SigV4 relies heavily on timestamps. When a client signs a request, they include an X-Amz-Date header (or query parameter). The signature is calculated over this timestamp. The server is supposed to do two things:

  1. Verify the signature is mathematically valid for that timestamp.
  2. Verify the timestamp is current (usually within ±15 minutes of the server's clock).

If the server skips step #2, the signature becomes a "Golden Ticket." It doesn't matter if the request was generated five minutes ago or five months ago. As long as the underlying Access Key Secret hasn't been rotated, that request remains valid forever.

Prior to version 1.75.0, lakeFS was essentially acting like a bouncer checking ID cards for a photo match but ignoring the "Expires: 2012" printed in bold red letters. An attacker didn't need the private key; they just needed to listen on the wire or read a verbose log file once.

The Code: The Smoking Gun

The vulnerability lived in pkg/gateway/sig/v4.go. The authentication logic was focused entirely on cryptographic verification and missed the temporal check. The fix, introduced in commit 92966ae611d7f1a2bbe7fd56f9568c975aab2bd8, adds the missing logic. It is a textbook example of "security checks we assume are there but aren't."

Here is the logic that was added. Notice the check for AmzMaxClockSkew (15 minutes) and the specific handling for Presigned URLs (which have their own expiration logic).

func (ctx *verificationCtx) verifyExpiration() error {
    // If it's a standard header-based auth
    if !ctx.AuthValue.IsPresigned {
        requestTime, _ := time.Parse(v4timeFormat, amzDate)
        now := time.Now().UTC()
        timeDiff := now.Sub(requestTime)
        
        // THE FIX: Enforce the 15-minute window
        if timeDiff.Abs() > AmzMaxClockSkew {
            return errors.ErrRequestTimeTooSkewed
        }
        return nil
    }
 
    // If it's a presigned URL
    expirationTime := requestTime.Add(time.Duration(ctx.AuthValue.Expires) * time.Second)
    if now.After(expirationTime) {
        return errors.ErrExpiredPresignRequest
    }
    return nil
}

Before this function existed, the code would simply return nil (success) as long as hmac.Equal(signature, calculatedSignature) was true. This diff effectively closes the time window from "Infinity" down to "15 minutes."

The Exploit: Zombie Requests

Exploiting this is trivially easy if you have visibility into the network or logs. Imagine a scenario where a CI/CD pipeline uploads a build artifact to lakeFS every night.

The Setup:

  1. The CI server sends a PUT /repo/main/builds/latest.jar request.
  2. The request includes the Authorization header with the SigV4 signature.
  3. The attacker (Eve) is lurking on the network, or perhaps has read-access to the CI server's verbose output logs.

The Attack: Eve copies the full HTTP request. Three weeks later, the developers release a new version. latest.jar is updated. Eve, wanting to cause chaos, simply pipes the old request into netcat or curl.

# Eve replays the captured request from 3 weeks ago
curl -X PUT "https://lakefs.corp.local/repo/main/builds/latest.jar" \
  -H "X-Amz-Date: 20250101T000000Z" \
  -H "Authorization: AWS4-HMAC-SHA256 Credential=AKIA.../20250101/us-east-1/s3/aws4_request, ... Signature=..." \
  --data-binary @malicious_old_version.jar

The Result: lakeFS receives the request. It checks the signature against the date 20250101. The signature matches. It then should check if 20250101 is close to Today. It doesn't. The write is accepted. The production build is silently downgraded to the vulnerable version from three weeks ago.

The Impact: Why Panic?

While a CVSS of 6.5 might look "Medium," the operational impact here is nasty. This is a Capture-Replay vulnerability (CWE-294), and in the context of a data versioning system, it enables "Time Travel Attacks."

  1. Data Integrity Loss: An attacker can revert datasets to previous states without generating new commit IDs that might alert administrators. They are effectively unstitching the timeline of your data.
  2. Denial of Service (DoS): If an attacker captures a DELETE request, they can periodically replay it. Every time you try to upload that file again, the attacker's script runs the DELETE replay, and the file vanishes. Troubleshooting this is a nightmare because the logs show a valid, authenticated user deleting the file.
  3. Presigned URL Bypass: Presigned URLs are often used to give temporary access (e.g., "download this file for the next 5 minutes"). With this bug, a 5-minute link becomes a permanent link.

The Fix: Closing the Loop

The mitigation is straightforward: Upgrade.

Remediation Steps:

  1. Upgrade lakeFS: Move to version 1.75.0 or later immediately. This introduces the verifyExpiration logic.
  2. Rotate Credentials: This is crucial. Patching the code prevents future invalid timestamps, but if an attacker has already captured a signed request, they might try to replay it. While the patch stops the replay, rotating the Access Keys invalidates the signature mathematically, ensuring total closure.

For developers building their own S3-compatible tools: Always validate X-Amz-Date. It is not metadata; it is a security control. If the time difference is greater than your skew tolerance (15 minutes is standard), drop the packet.

Official Patches

treeverseFix commit implementing verifyExpiration

Fix Analysis (1)

Technical Appendix

CVSS Score
6.5/ 10
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:N
EPSS Probability
0.04%
Top 89% most exploited

Affected Systems

lakeFS S3 Gateway

Affected Versions Detail

Product
Affected Versions
Fixed Version
lakeFS
treeverse
< 1.75.01.75.0
AttributeDetail
CWE IDCWE-294
Attack VectorNetwork (Capture/Replay)
CVSS Score6.5 (Medium)
ImpactData Integrity / Unauth Access
VulnerabilityMissing Timestamp Validation
ProtocolAWS SigV4

MITRE ATT&CK Mapping

T1550Use Alternate Authentication Material
Defense Evasion
T1557Adversary-in-the-Middle
Credential Access
T1078Valid Accounts
Initial Access
CWE-294
Authentication Bypass by Capture-replay

Authentication Bypass by Capture-replay

Known Exploits & Detection

ManualStandard replay of captured HTTP requests using curl or Burp Suite.

Vulnerability Timeline

Issue Reported
2025-10-23
Patch Committed
2025-12-02
CVE Published
2026-01-15

References & Sources

  • [1]Issue #9599: Presigned URL does not respect expiration
  • [2]GHSA-f2ph-gc9m-q55f Advisory

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•about 5 hours ago•CVE-2026-54347
8.7

CVE-2026-54347: Stored Cross-Site Scripting in Froxlor DNS TXT Record Configuration

A critical stored Cross-Site Scripting (XSS) vulnerability was identified in Froxlor server administration software panel before version 2.3.8. Authenticated customers with DNS editor privileges can inject malicious JavaScript into DNS TXT records. Because the application processes these values via a raw formatting callback without context-aware HTML entity encoding, the payload executes in the security context of administrative users who view the affected domain's DNS zones.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 6 hours ago•CVE-2026-54348
7.2

CVE-2026-54348: Second-Order SQL Injection in Froxlor API Layer

An authenticated administrator with privileges to manage admin accounts (such as change_serversettings) can execute arbitrary SQL commands via a second-order SQL injection vulnerability. The flaw resides in Froxlor's administrative API endpoints, specifically during the handling of IP address mapping parameters which are stored as serialized arrays and later interpolated without sanitization into active database queries. This vulnerability allows high-privileged administrative attackers to compromise the database. By injecting a payload into administrative profile metadata, an attacker can extract sensitive credentials, manipulate backend settings, or potentially disrupt database integrity. The vulnerability affects all versions of Froxlor prior to 2.3.8.

Amit Schendel
Amit Schendel
3 views•6 min read
•about 7 hours ago•CVE-2026-54543
5.4

CVE-2026-54543: DNS Resource Record (RR) Injection in Froxlor DomainZones API

CVE-2026-54543 is a DNS Resource Record (RR) Injection vulnerability in Froxlor, an open-source server administration control panel. Prior to version 2.3.8, the DomainZones.add API command failed to perform strict sanitization and validation on the user-controlled record (label) and type parameters before serializing them into BIND-compatible zone files. An authenticated customer with DNS zone management permissions can inject control characters, breaking out of the original record context to define unauthorized resource records within managed zones.

Amit Schendel
Amit Schendel
4 views•7 min read
•about 7 hours ago•CVE-2026-42533
9.2

CVE-2026-42533: NGINX Map Directive and Regex Matching Pre-Auth Heap Buffer Overflow & Info Leak

CVE-2026-42533 is a critical security vulnerability discovered in NGINX Open Source, NGINX Plus, NGINX Ingress Controller, and related products, referred to as the 'Two-Pass Capture-Clobbering' bug. The flaw is situated within NGINX's internal evaluation engine when handling complex variables, exposing a heap-based buffer overflow and information leak when a configuration chains regular expression-based map directives with numbered capture groups. An unauthenticated remote attacker can exploit this weakness by transmitting crafted HTTP requests to trigger remote code execution or defeat ASLR.

Alon Barad
Alon Barad
7 views•7 min read
•about 8 hours ago•CVE-2026-55593
6.5

CVE-2026-55593: Persistent Administrative Hijacking via Cross-Site Request Forgery in Froxlor Ajax Router

Froxlor prior to version 2.3.8 contains a high-severity architectural flaw where the standalone lib/ajax.php entry point bypasses the centralized request validation in lib/init.php. Unauthenticated remote attackers can leverage Cross-Site Request Forgery (CSRF) to induce authenticated administrators to submit forged requests that modify API key whitelists and expiration dates, potentially yielding persistent, out-of-band administrative control.

Amit Schendel
Amit Schendel
6 views•8 min read
•about 9 hours ago•CVE-2026-62988
9.0

CVE-2026-62988: Multi-Factor Authentication and Credential Bypass in Froxlor API

An insecure data retrieval flaw in the Froxlor server administration panel API allows authenticated remote attackers to retrieve unredacted bcrypt password hashes and Base32-encoded Time-Based One-Time Password (TOTP) seeds. Affected endpoints include several 'get' and 'listing' handlers for customers, administrators, and FTP accounts. Utilizing these leaked parameters, attackers can crack the password hashes offline and concurrently generate valid second-factor authentication codes to completely bypass access controls.

Amit Schendel
Amit Schendel
8 views•6 min read