[ANNOUNCEMENT-MGR-001] Over-broad passwordless sudo for www-data (cp/chmod/chown as ANY user)
announcement_manager.sh : 537-542
Installer writes /etc/sudoers.d/99-supermon-announcements granting www-data NOPASSWD access to /bin/cp, /bin/chown, and /bin/chmod as ALL users without argument restrictions.
Related: ANNOUNCEMENT-MGR-002
Impact: Remote attacker who can invoke PHP or compromise www-data can copy arbitrary files, change ownership, and modify permissions system-wide as root.
[ANNOUNCEMENT-MGR-002] Backend PHP API endpoints lack authentication
upload_mp3.php : 1-67
PHP action scripts have no session_start() or login check. Only announcement.inc gates the UI.
Related: ANNOUNCEMENT-MGR-004
Impact: Anyone who can reach the web server can upload audio, modify root crontab, trigger playback, and delete files without Supermon login.
High Security Issues
[ANNOUNCEMENT-MGR-003] Crontab injection via unvalidated schedule POST fields
announcement.php : 164-212
Cron lines built directly from $_POST min/hour/dom/month/dow/week without allowlist validation.
Impact: Unauthenticated attacker can persist arbitrary root cron jobs.
[ANNOUNCEMENT-MGR-004] Passwordless root crontab management for www-data
99-supermon-announcements : 9-10
Sudoers grants www-data NOPASSWD /usr/bin/crontab as root.
Impact: Persistent root-level code execution via malicious cron entries.
Medium Issues
[ANNOUNCEMENT-MGR-005] User-controlled Piper voice model path passed to shell script
piper_generate.php : 24-60
Voice model path from POST passed to piper_prompt_tts.sh without path allowlisting.
Impact: API caller could point Piper at attacker-controlled ONNX path.
[ANNOUNCEMENT-MGR-006] Unquoted audio path in generated playaudio/playglobal scripts