Zero-Day
9 min read
March 17, 2026

When an Application Says Too Much. Information Exposure in CVAT (No CVE)

When an Application Says Too Much. Information Exposure in CVAT (No CVE)

Every pentester or bug hunter sooner or later hits this wall: you find a bug, describe it precisely, build a perfect Proof of Concept, send the report and… silence. No official GHSA advisory, no CVE number, no thanks from the developers.

That’s exactly how the story ended for another bug I found while testing the Computer Vision Annotation Tool (CVAT) platform. Although this vulnerability never got an official "badge" with a number, it makes an excellent case study of a Sensitive System Information Exposure flaw (CWE-497). Rated by me at 5.3 (Medium), it perfectly shows how talkative applications can be when you "annoy" them the right way.

TL;DR - Key takeaways

  • Why Are Information-Leak Bugs Dangerous?
  • Vector 1: An Invalid "Remote Source" and Server Path Leakage
  • Vector 2: Internal Architecture Uncovered via Lambda Functions
  • How to Silence an Over-Talkative Application? (Remediation)

Why Are Information-Leak Bugs Dangerous?

Before we get to the specifics, one thing is worth noting: information disclosure rarely leads directly to server takeover (RCE). It is, however, the foundation of reconnaissance.

From an attacker’s perspective, every piece of information about system paths, the technologies in use, or internal network addressing is like finding a bank’s architectural blueprints before the heist. It lets you pick the next exploits more precisely.

In CVAT I found two vectors for leaking sensitive diagnostic data.

CWE-497: Exposure of Sensitive System Information

This class of vulnerability covers situations where an application inadvertently reveals sensitive system data — file paths, configurations, internal addresses — through error messages, diagnostic logs, or API responses.

CWE-497
5.3Medium
Vector: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
Exploitability Metrics
Attack Vector (AV)
Network (N)Adjacent (A)Local (L)Physical (P)
Attack Complexity (AC)
Low (L)High (H)
Privileges Required (PR)
None (N)Low (L)High (H)
User Interaction (UI)
None (N)Required (R)
Scope (S)
Unchanged (U)Changed (C)
Impact Metrics
Confidentiality Impact (C)
None (N)Low (L)High (H)
Integrity Impact (I)
None (N)Low (L)High (H)
Availability Impact (A)
None (N)Low (L)High (H)

Vector 1: An Invalid "Remote Source" and Server Path Leakage

When creating a new Task in CVAT, we can point to a "Remote Source" as the file origin (e.g. a link to a network resource). But what happens if we supply a malicious or junk URL to a domain that returns no valid files to parse?

Instead of a standard "Could not download file" error, the backend (built on the Django framework) "chokes" and throws a full system error into the user interface and directly into the API response:

IsADirectoryError: [Errno 21] Is a directory: '/home/django/data/data/878459/raw'

By this simple means I learned exactly which directory the application runs in on the server, under what privileges (or on what structure) it operates, and how it internally maps task identifiers to folders on the hard drive.

For an attacker looking for, say, a Local File Inclusion (LFI) or Path Traversal vulnerability, that’s a valuable clue.

User request
Remote Source URL:https://evil.example.com/garbage
Expected response:"Unable to download the file"

A plain URL supplied as the data source for a new Task

Server response
IsADirectoryError:[Errno 21] Is a directory: '/home/django/data/data/878459/raw'
Application directory: /home/django/
Data structure: /data/data/<ID>/raw
Mapping of task IDs to disk folders

The full Django stack trace leaked to the user

Code analysis — system paths exposed in an error message
A leak of system paths through carelessly surfaced Django framework errors.

Vector 2: Internal Architecture Uncovered via Lambda Functions

The second vector was a bit cleverer and involved the Lambda functions feature. I used plain iteration (brute-force) of API request identifiers:

GET /api/lambda/functions/<ID>

When the application could not find a function with a given number (because, say, it didn’t exist or I had no access to it), the server responded with HTTP 404 Not Found. This was not a standard, short message, though. The server response contained a detailed log:

  • We know that Nuclio is used under the hood to handle serverless/lambda.
  • We know that communication runs unencrypted over HTTP on port 8070.
  • We learned the internal network addressing (Internal Domain): nuclio-dashboard.internal.cvat.ai.

Pivoting and Escalation

If an attacker gained a foothold on the server (e.g. through an SSRF vulnerability in another part of the application), they would know exactly where to aim inside the internal network (pivoting) to reach the Nuclio microservices.

404 Client Error: Not Found for url:
http://nuclio-dashboard.internal.cvat.ai:8070/api/functions/2137

Internal architecture exposed
HTTP 404 Not Found:

"404 Client Error: Not Found for url: http://nuclio-dashboard.internal.cvat.ai:8070/api/functions/2137"

Framework

Nuclio

Serverless / Functions-as-a-Service

Internal domain

nuclio-dashboard.internal.cvat.ai

Full internal network addressing

Protocol / Port

HTTP :8070

No encryption (TLS)

Network architecture — CVAT internal infrastructure uncovered
A single HTTP 404 error revealed the internal microservice architecture and network addressing.

How to Silence an Over-Talkative Application? (Remediation)

Even if the developers ignored the report, the principles of secure programming (and error handling) remain unchanged.

  • Exception Handling — System errors and exceptions should never surface (to the end user’s view). Use try/catch blocks in a deliberate, planned way.
  • Generic error messages — When the application cannot process a path or connect to a microservice, the user should see only a safe, generic message: "An error occurred while processing the file" or "Resource not found".
  • Server-side logging — Stack traces, [Errno 21] errors, and port information (8070) should go only to system logs accessible only to administrators or SOC/QA teams.
  • Static analysis (SAST) — Static Application Security Testing tools can easily flag where the code lacks sanitization of application errors surfaced externally.
Vulnerable
API response:IsADirectoryError: [Errno 21] '/home/django/data/...'
404 response:nuclio-dashboard.internal.cvat.ai:8070
Stack Trace:Full Django error dumps in the HTTP response

Paths, ports, and internal addresses visible to the user

Secure
API response:"An error occurred while processing the file"
404 response:"Resource not found"
Stack Trace:Only in server logs (SOC/QA)

try/catch + generic messages + SAST = security

Summary

No CVE does not mean no risk. Every piece of system information an application reveals — a directory path, an internal domain, a microservice port — is another piece of the puzzle an attacker can use for more precise reconnaissance and attack escalation. Keep that in mind during your own audits!

Bibliography

1
CWE-497: Exposure of Sensitive System Information to an Unauthorized Control Sphere

The official MITRE entry describing the class of vulnerability based on inadvertently revealing sensitive system data (paths, configurations, internal addresses) to unauthorized parties.

2
CWE-209: Generation of Error Message Containing Sensitive Information

A related class of vulnerability concerning the generation of error messages that contain sensitive information such as a stack trace, system paths, or configuration data.

3
CVAT, Computer Vision Annotation Tool (GitHub Repository)

The official open-source repository of the CVAT data-annotation platform for Computer Vision projects, in which the described vulnerabilities were found.

4
CVAT Documentation. Serverless Tutorial (Nuclio)

The CVAT documentation describing integration with the Nuclio framework for automatic annotation — the component whose internal domain was revealed by the HTTP 404 error.

5
OWASP, Improper Error Handling

The OWASP guide to improper error handling, one of the most common causes of system-information leaks in web applications.

Is your application saying too much as well?

A PWNONE security audit will detect system-information leaks before an attacker does. Get in touch.

Order a security audit