CVE-2026-110636 is an OS command injection (CWE-78) in the pypdftk Python package through version 0.5, scored 9.8 critical. Paths passed to fill_form() and related helpers are placed into a shell command. I could not confirm a fixed release, so check the project and avoid untrusted paths.
What's affected
pypdftk through 0.5, per the CVE record. The weak functions are fill_form(), dump_data_fields() and pdftk_cmd_util(), which build shell commands from caller supplied paths and run them with subprocess.Popen and shell=True.
The fix I found is an open pull request that switches to running the command without a shell, and it was not merged when I looked. A fixed release is not confirmed, so check the project for the latest state.
How to check if you're exposed
Find out whether the package is installed in any environment:
pip show pypdftk
pip freeze | grep -i pypdftk
Check requirements files and lock files in your repositories for pypdftk. Then read the code that calls these helpers and trace the source of the pdf_path and out_file values. User uploads and values from request parameters are the risky sources.
You can also run the free in-browser dependency scan or browse the Gold directory to see where a package or product shows up in your stack.
What to do now
- Find every use of pypdftk in your services and scripts.
- Make sure
pdf_pathandout_filenever come from an untrusted source. Generate file names yourself and store files in a fixed directory. - If you must keep the package, wrap it or replace the vulnerable calls with
subprocess.runusing a list of arguments and no shell. - Check whether a patched release or maintained fork exists before you pick a fix, and test any fork before you adopt it.
- Run the PDF step as a low privilege user, in a container if you can.
Why it matters
Using shell=True hands a string to the shell, which treats some characters as syntax. A file path with those characters can add new commands. This is CWE-78. The safe pattern is to pass a list of arguments and no shell, which is what the open pull request does.
The record says the commands run with the privileges of the Python process. Web apps that fill PDF forms with user data often run under accounts that can reach customer documents and secrets.
The project looks lightly maintained, and a fixed release could take time or never come. That is a reason to remove the weak call pattern from your own code and not wait. The record does not flag this CVE as exploited in the wild and it is not a CISA Known Exploited Vulnerability.
Try it yourself
Click through it at your own pace, or open it full screen.
Quick check
Is a patched version available?
I could not confirm one. A pull request exists but was open when I checked, so confirm the project's status before you rely on it.
Do I need to worry if file paths are fixed?
Exposure is much lower when no attacker controlled value reaches the path arguments, but it is still best to remove the shell call.
Sources
Last reviewed: 19 October 2026.