Safeguard
Vulnerability Analysis•

CVE-2026-110636: OS Command Injection in pypdftk Through 0.5

CVE-2026-110636 is an OS command injection in pypdftk through 0.5. No fixed release is confirmed, so stop passing untrusted paths and watch the project.

Safeguard Security Team
3 min read

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

  1. Find every use of pypdftk in your services and scripts.
  2. Make sure pdf_path and out_file never come from an untrusted source. Generate file names yourself and store files in a fixed directory.
  3. If you must keep the package, wrap it or replace the vulnerable calls with subprocess.run using a list of arguments and no shell.
  4. Check whether a patched release or maintained fork exists before you pick a fix, and test any fork before you adopt it.
  5. 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.

Never miss an update

Weekly insights on software supply chain security, delivered to your inbox.

Self-healing security runs on Safeguard.

Your first fix PR is minutes away.

No sales call required, even your agent can complete the purchase over MCP.