Skip to main content

Nitro PDF Pro app.alert() Denial of Service Vulnerability

← Back to Advisories
CVE Number CVE-2025-69624
Vendor Nitro
Credit Abu

Description

A denial-of-service vulnerability exists in Nitro PDF Pro 14.41.1.4 when improper arguments are passed to the JavaScript method app.alert(). Supplying invalid input can lead to a NULL pointer dereference, causing the application to terminate immediately. In particular, when app.alert(app.activeDocs, true); is invoked, app.activeDocs is internally treated as a NULL value. However, Nitro PDF Pro fails to adequately validate whether this value can be safely converted into a string and proceeds to pass it into subsequent string-handling routines. As a result, an invalid pointer is dereferenced, leading to an access violation and immediate application crash when the user opens the malicious PDF file.

Details

The issue arises during the conversion of JavaScript values to strings within the app.alert() method.

An attacker can craft a PDF such that the following JavaScript is executed automatically upon document open via an OpenAction:

app.alert(app.activeDocs, true);

In this case, app.activeDocs is evaluated as a NULL-equivalent value rather than a valid string object. However, Nitro PDF Pro does not properly validate this value and passes it directly to JS_ValueToString() and subsequently to JS_GetStringChars().

The vulnerable flow can be simplified as follows:

app.alert(value, true)
  JS_ValueToString()
  JS_GetStringChars()
  dereference crash

In the actual vulnerable path, when the argument is not a simple string, JS_ValueToString() is invoked and its return value is passed directly to JS_GetStringChars():

if ( argc != 1 || (v16 = *argv, (*argv & 7) != 0) )
{
    v30 = JS_ValueToString(a1, *argv);
    StringChars = JS_GetStringChars(v30);  // crash
}

The problem is that even though app.activeDocs resolves to a NULL value, the implementation does not sufficiently verify whether the returned value is a valid string object. As a result, JS_GetStringChars() assumes the pointer refers to a valid string object and attempts to access its internal members:

__int64 __fastcall JS_GetStringChars(__int64 *a1)
{
    v1 = *a1;
    ...
}

If a1 is NULL or otherwise invalid, this leads to an access violation, causing Nitro PDF Pro to terminate immediately.

Timeline

2025-12-10 - Vulnerability reported to Vendor

2026-02-02 - Vendor Patch Release

2026-04-06 - Public Release