CVE-2026-46529 is a command injection vulnerability in Atril Document Viewer affecting versions prior to 1.26.3 and 1.28.4. The flaw is in shell/ev-application.c, specifically ev_spawn(), where attacker-controlled PDF link destination data is incorporated into a command line without proper quoting via g_shell_quote(). That command line is then passed to g_app_info_create_from_commandline(), which reparses it into argv elements using shell-like parsing semantics. A malicious PDF can abuse a /GoToR action and attacker-controlled /D field to inject a standalone argument such as --gtk-module=PATH. GTK subsequently loads the referenced module with dlopen(), causing execution of any constructor in the shared object. The issue can be weaponized as a single-file exploit by using a polyglot file that is both a valid PDF and a valid ELF shared library, so that clicking a malicious link inside the PDF causes Atril to load the same file as a GTK module and execute attacker code as the user.
Mallory correlates every CVE against your assets, your vendors, and active adversary campaigns. Know which vulnerabilities matter for you, not just which ones are loud.
What it means. What to do now. Patch path, mitigations, and the assume-compromise checklist.
What an attacker gets, and what they’ve been doing with it.
If you can’t patch tonight, do this now.
Patch, then assume compromise.
ev_spawn(). If consuming distribution packages, install the patched package version provided by the distribution. Debian advisory data in the provided content indicates a fixed package for Debian stable (trixie): 1.26.2-4+deb13u1.2 valid exploits after Mallory filtered fakes, detection scripts, and README-only repos.
Repository is a small standalone Python PoC centered on a single script, CVE-2026-46529.py, plus README, license, and minimal requirements. The script is not part of a known exploit framework. Its main purpose is to generate a malicious PDF that embeds attacker-controlled URI actions, targeting claimed unsafe URI handling in Linux PDF viewers Atril, Evince, and XReader. The exploit class builds raw PDF objects manually, including a Catalog, Pages, Page, Font, content stream, annotations, and notably a /URI action plus an /OpenAction. The default payload logic constructs a file:// URI pointing to /bin/sh with -c and an attacker-supplied command, enabling local command execution if the viewer/system passes the URI unsafely to the OS. The CLI supports either a fully custom URI (-u) or a command string (-c), writes the resulting PDF to disk, and can optionally start a simple HTTP server on port 8080 to serve the generated file. README content documents example payloads including launching xterm, invoking /bin/bash, fetching a remote shell script over HTTP, and using an SMB URI. Overall, this is an operational exploit generator for malicious PDF delivery rather than a scanner or detector.
This repository is a working Linux RCE proof-of-concept for CVE-2026-46529 affecting atril, xreader, and GTK3-based evince builds. The exploit abuses argv injection in the viewers' /GoToR handling path: attacker-controlled PDF fields are interpolated into a command line without proper quoting, then reparsed into argv. By injecting a leading-space argument '--gtk-module=%f', the spawned child viewer loads an attacker-controlled shared object via GTK's module loading mechanism. Repository structure is small and purpose-built: README.md documents the vulnerability, affected versions, and usage; exploit.sh is the main operator-facing entry point that compiles the payload and builds the final artifact; evil_gtk_module.c contains the malicious shared library payload; build_polyglot.py constructs the final PDF+ELF polyglot. The Python builder reads a compiled ELF shared object, locates the GNU build-id note, overwrites that informational field with '%PDF-1.4' so the file is simultaneously accepted as both ELF and PDF, then appends a minimal PDF containing a full-page Link annotation and a /GoToR action. The /F field embeds the output basename plus '?1' to force the viewer down the spawn path, while /D contains the injected ' --gtk-module=%f' string. Glib later substitutes %f with the runtime-resolved local path of the opened file, allowing the exploit to work without knowing the victim's directory path. The payload is operational rather than just demonstrative: when the malicious module is dlopened, its constructor writes /tmp/PWNED_atril_<pid>.txt and executes a detached bash reverse shell to a configurable attacker IP and port. exploit.sh exposes those parameters via --ip and --port, compiles evil.so with gcc (or a cross-compiler), invokes build_polyglot.py, and emits a ready-to-deliver PDF. Successful exploitation requires a vulnerable viewer, Linux target matching the built architecture, preserved filename basename, user click interaction, and outbound network access for the reverse shell.
Products and vendors Mallory has correlated with this vulnerability. Open in Mallory to drill down to specific CPE configurations and version ranges.
Vendor-confirmed product mapping. Mallory continuously reconciles this list against your asset inventory.
26 sources tracked across advisories, community write-ups, and news. New activity surfaces here as Mallory finds it.
A single-click remote code execution vulnerability in the Atril document viewer that allows arbitrary code execution as the user when they click a link inside a malicious PDF document, including via a polyglot PDF/ELF payload.
A remote code execution vulnerability in Evince-derived document viewers where unquoted PDF /GoToR destination data is re-parsed into argv, allowing injection of a `--gtk-module` argument and loading of attacker-controlled shared libraries via `dlopen`. The issue affects Evince forks such as Atril and Xreader and can be triggered by opening a malicious PDF and clicking the embedded link.
Query your assets running an affected version, and investigate the blast radius.
Every observed campaign linking this CVE to a named adversary.
Malware families riding this exploit, with evidence and IOCs.
YARA, Sigma, Snort, and vendor rules, auto-deployed to your SIEM.
Cross-references every affected SKU, including bundled OEM variants.
Community discussion across Reddit, Mastodon, and other social sources.