GHSA-9jxx-vjrv-h2rq
Docling imports plugin entry points before the allow_external_plugins check
Packages
| Ecosystem | Package | Affected | Fixed in |
|---|---|---|---|
| PyPI | docling | >= 2.27.0, < 2.131.0 | 2.131.0 |
| PyPI | docling-slim | >= 2.92.0, < 2.131.0 | 2.131.0 |
Details
As written in the advisory (Markdown source, shown as plain text).
### Summary
`allow_external_plugins=False` (the default, and the CLI default) is meant to restrict docling to its own model plugins. However, docling's plugin factories call pluggy's `load_setuptools_entrypoints()`, which imports every module registered under docling's plugin entry-point group. Only afterwards does docling filter out modules outside the `docling.` namespace. Import-time code in any installed third-party plugin therefore runs even though external plugins are disabled.
### Details
In `docling/models/factories/base_factory.py`, `load_from_plugins()` loads all entry points first and applies the `allow_external_plugins` check only to the already-imported modules. The CLI creates these factories when it starts, so running `docling` imports every registered plugin module. A log message says the plugin "will not be loaded", although its module has already been imported.
### Affected configurations
Environments in which a package registering a docling plugin entry point is installed, for example an unvetted or compromised dependency, and which rely on `allow_external_plugins=False` to keep that code from running.
### Impact
Execution of a third-party plugin module's import-time code in the docling process, contrary to the documented behaviour of `allow_external_plugins=False`.
### Patches
Fixed in docling 2.131.0 by [#4413](https://github.com/docling-project/docling/pull/4413). Plugin entry points are now filtered by module name before they are loaded, so with `allow_external_plugins=False` third-party plugin modules are no longer imported.
### Workarounds
Upgrade to 2.131.0. For older versions:
Only install trusted packages in environments that run docling. Check which packages register docling plugin entry points with `importlib.metadata.entry_points()`.
References
External links from the advisory. They lead to third-party sites.
- https://github.com/docling-project/docling/security/advisories/GHSA-9jxx-vjrv-h2rq
- https://nvd.nist.gov/vuln/detail/CVE-2026-105745
- https://github.com/docling-project/docling/pull/4413
- https://github.com/docling-project/docling/commit/0f443b3786e98688a2da3b7c8f56fe5e46af876c
- https://github.com/docling-project/docling
- https://github.com/docling-project/docling/releases/tag/v2.131.0