PST-085: The page-rendering child process inherits the full environment, including the secret key and database credentials #814
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo#814
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found in the security audit of 2026-10-10 (
SECURITY-AUDIT-2026-10-10.md), run againstmainatc30851bfrom 8 to 10 October 2026, as PST-085. Severity: Informational.The text below is the audit's entry, unchanged apart from links to the other issues it names. The finding was produced by automated review and checked by a second automated pass; re-check it before acting on it.
src/postulo/jobs/rendering.py(98-104)Who can do it, and what they need. A malicious web page captured by a member, combined with a hypothetical memory-safety bug in WeasyPrint's text shaping or layout stack (Pango, HarfBuzz, FreeType).
How it works.
Impact. No known exploit. The process isolation protects availability but not confidentiality of the instance's secrets if the renderer itself were compromised.
Verification (verdict: confirmed; severity after verification: Informational). Keep informational. Add that env scrubbing alone would not protect the database, media or a .env file in the working directory, because the child runs as the same user. Real containment would need a seccomp or namespace sandbox or a dedicated unprivileged user. The sentence 'The process isolation protects availability but not confidentiality if the renderer itself were compromised' is correct. The affected lines are rendering.py:98-104, not 98-104 plus rendering_child.py:56-76 as a defect, because the child's limits are working as designed.
Suggested remediation. Pass env={} plus the minimal PATH/LANG/fontconfig variables and a throwaway cwd. Consider prctl no_new_privs or seccomp, and bound the captured stderr.
Fixed in
e256f3bdcon main.