Fix the open security and bug issues: what Apprise dials, local schemes, redirects, timeouts, HTML escaping, masking, lock and CI audit #23
No reviewers
Labels
No labels
bug
documentation
enhancement
security
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo-apprise!23
Loading…
Reference in a new issue
No description provided.
Delete branch "sec2-fixes"
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?
One pull request for every open
bug/securityissue of this repository (the security review of 2026-10-16 and the older audit and review issues), plus this repository's part of #13.What and why
main(42be52048): pyjwt 2.15.1, urllib3 2.8.0, oauthlib 4.0.0, Apprise 2.0.1.pip-audit==2.10.1 --strictover the exported lock reports nothing.UV_VERSION(0.12.17) through its installer checked againstUV_INSTALLER_SHA256; a newsecurityjob audits the exported lock with a pinnedpip-audit --stricton every push and every Monday (the test job skips the scheduled run).tests/test_workflows.pyfails on an unversioned or unchecked installer or a missing audit. Not done: testing Python 3.12 and 3.13 (the suite still runs on 3.14 only; it would triple a job on a strained runner), and the other five repositories.body_formatand everynotify()), so HTML services (Telegram, mail, the API mailers) receive them escaped. A test sends a hostile title through the real Telegram conversion.dialled): mail atsmtp_host, XMPP atxmpp_host, a Firebasekeyfile=given as an address as an address. A key file given as a path (keyfile=,subfile=) is refused.test()andsend()do not reach Apprise for a refused line.ntfy://topic(cloud mode), Mailgun, SparkPost, SMTP2GO, SendPulse and WeChat no longer have their host slot looked up; a server of the person's own is still checked.syslog,dbus,kde,qt,glib,gio,gnome,macosx,windows,evolution(s),blink1refused by the scheme as typed (platform independent) and again by the protocol of every server built.http_redirects=False;redirect=yesis refused. The floor on Apprise rises to 1.11, the first release with that option (checked 1.9.x and 1.10.0: ignored or invalid).rto=/cto=capped at 10 s; one send has an overall 45 s deadline (the work is abandoned in a daemon thread, its sockets being capped); a connection holds at most 20 URLs.ngettextentry. The guard refuses any change to a translation outside Weblate, and a singular gaining a plural counts as one, so the catalogues go in two commits: one drops the two old entries (a string the source lost), the next re-adds the plural empty.postulo-messages guard --base origin/mainpasses. Weblate's translation memory has the old sentences; French and Portuguese for the new and reworded strings need Weblate before a release. The extract also created the seven catalogues the core's new languages require (empty).Tests
61 passed (was 30), ruff check and format clean,
extract --check,check,guardclean. The new tests fail without the fix (the old module cannot even be imported by them; the behaviours are asserted one by one).pytest -m releaseis not expected green until Weblate has filled the new strings.Left open
Nothing among the listed issues. Limits worth knowing: a destination is still resolved twice (check, then Apprise's own connection), as the module docstring says; and "an address-bearing argument the table does not know" is refused only by name (
smtp,xmpp,keyfile,subfile), not by a general scan, because Apprise has no reliable marker for such arguments.Closes #10, #11, #12, #14, #15, #16, #17, #21, #22
Part of #13
🤖 Generated with Claude Code
body_format, so HTML services receive a captured page's words as markup #21