Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain account with Media or Profile permission
-
DeliveryInject #{process.run()} payload into playlist URL or metadata
-
ExploitPayload written unsanitized to liquidsoap.liq
-
ExecutionStation restart triggers Liquidsoap config parse
-
PersistShell command executes as azuracast user
-
ImpactHost compromise / lateral movement
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A05:2025 - Injection
ASVS 5.0
V1 - Encoding and Sanitization Code injection prevention, sandbox exec
MITRE ATT&CK
2 techniques across 2 tactics: Execution, Initial Access The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated AzuraCast account with StationPermissions::Media (to set a playlist remote_url) or StationPermissions::Profile (to set station name/description/genre/url, live_broadcast_text, or dj_mount_point). The malicious payload must be a Liquidsoap string-interpolation sequence (#{...} invoking process.run()) placed in one of those fields. Execution is NOT immediate: it fires only when the affected station's Liquidsoap backend is restarted and re-parses the generated .liq config (the UI:P/interaction-dependent step), so a station restart is a hard prerequisite. Exploitation is limited by needing valid credentials with the relevant permission and applies to AzuraCast <= 0.23.3; it is fixed in 0.23.4. Commands run with the privileges of the azuracast service user, not root. |
| Impact | This is a genuine remote code execution flaw (CWE-94) with strong technical impact, but its real-world priority is tempered by an authentication requirement and a delayed, interaction-dependent trigger. The vendor CVSS 4.0 vector (AV:N/AC:L/PR:L/UI:P/VC:H/VI:H/VA:H = 8.6) is internally consistent with the description: network-reachable API, low attacker complexity, but requiring a valid account holding Media or Profile permissions (PR:L, not unauthenticated) and passive interaction (UI:P) because injected code only executes when the station's Liquidsoap backend restarts. No EPSS score, no CISA KEV listing, and no in-the-wild data are provided, so there is no evidence of active exploitation - however, a detailed proof-of-concept IS embedded in the GHSA advisory (two working PoCs with exact HTTP requests), so publicly available exploit code exists. The combination of a reliable public PoC, full C/I/A impact, and trivial complexity makes this a real, actionable RCE for any AzuraCast operator, though the PR:L gate and low deployment footprint keep it below the tier of an unauthenticated, mass-exploitable bug. Net: prioritize patching to 0.23.4 for exposed multi-tenant AzuraCast instances, but this is targeted (needs an account) rather than internet-wide wormable. No SSVC decision fields were supplied in the input. |
| Exploit ScenarioDerived | An authenticated AzuraCast user holding only Media or Profile station permissions submits a playlist remote URL or station metadata field (e.g. description, genre, name) containing a Liquidsoap interpolation payload such as http://x#{process.run('id > /tmp/pwned')}.example.com/stream. The unsanitized value is written verbatim into the generated liquidsoap.liq config, and when the station backend is (re)started the #{process.run(...)} expression is evaluated, executing arbitrary shell commands as the azuracast OS user. A complete PoC with exact API requests is published in the GHSA advisory, lowering the barrier to exploitation. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 27, 2026
Authenticated code injection in AzuraCast 0.23.3 and earlier lets a user holding StationPermissions::Media or StationPermissions::Profile plant Liquidsoap interpolation sequences (#{...}) into playlist remote URLs or station metadata fields, which the ConfigWriter::cleanUpString() helper writes unsanitized into the generated .liq configuration. When the affected station's Liquidsoap backend is next restarted and re-parses that config, the embedded #{process.run(...)} expression is evaluated and executes arbitrary shell commands as the azuracast service user. Exploitation is not confirmed in the wild (no CISA KEV listing), but the vendor advisory publishes proof-of-concept payloads for both the Media-permission and Profile-permission paths; the trigger is delayed and interaction-dependent, requiring a station restart after the malicious value is saved.
RemediationAI
Vendor-released patch: upgrade AzuraCast to 0.23.4 or later, which contains the fixes in commits d04b5c55ce0d867bcb87f49f7082bf8edbcd360c and ff49ef4d0fa571a3661abff6d0a9546ba3ed5df5 (see GHSA-93fx-5qgc-wr38). If an immediate upgrade is not possible, treat the permission boundary as the control surface: revoke StationPermissions::Media and StationPermissions::Profile from all non-administrative accounts, since an account without either permission cannot reach a vulnerable field; the trade-off is that legitimate DJs and media managers lose the ability to set remote playlist sources or edit station metadata until patched. Audit existing station records and the on-disk Liquidsoap configuration files for the literal sequence #{ or process.run( in playlist remote_url, station name, description, genre, url, live_broadcast_text and dj_mount_point values, and remove or restore any matches before the next backend restart - remember that execution only fires on restart, so remediation can be performed while the malicious value is still inert. As defence in depth, run the azuracast service account as an unprivileged, containerised user with no access to secrets beyond its own database credentials and monitor for unexpected child processes spawned by Liquidsoap. Rotate any credentials, API keys and tokens reachable by the azuracast user if suspicious injected values or unexpected process.run() invocations are found.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 2 packages in composer, euvd
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
AzuraCast generates its radio automation backend configuration as Liquidsoap scripts (.liq) from user-supplied station settings. Liquidsoap, like Ruby, performs string interpolation inside double-quoted strings: any #{expression} is evaluated as Liquidsoap code, and the process.run() function executes a shell command. The affected helper ConfigWriter::cleanUpString() in backend/src/Radio/Backend/Liquidsoap/ConfigWriter.php (around line 1345) only maps double quotes to single quotes and strips CR/LF characters, leaving #{...} interpolation markers and the backslash escape character untouched. This is a classic CWE-94 code injection: untrusted input is concatenated into an interpreted-language configuration artifact without neutralising the metacharacters of that interpreter. The vulnerable sinks include playlist.remote_url (Media permission) embedded into input.http("...") and input.harbor("..."), plus station name, description, genre and url, backend_config.live_broadcast_text, and dj_mount_point (Profile permission). The CPE cpe:2.3:a:azuracast:azuracast:*:*:*:*:*:*:*:* and the Composer package composer/azuracast/azuracast confirm the upstream project as the affected component through 0.23.3. Commands execute with the privileges of the azuracast service account, not root, which limits blast radius but still permits full application-level compromise and lateral movement within the host.
Know when Azuracast gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:P/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Network API with low complexity but requires a Media/Profile account (PR:L) and a station restart to trigger execution (UI:R); command execution as azuracast user yields full C/I/A within an unchanged scope.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
AzuraCast before 0.23.4 contains a code injection vulnerability in the ConfigWriter::cleanUpString() method that fails to sanitize Liquidsoap string interpolation sequences, allowing authenticated users with Media or Profile permissions to inject arbitrary Liquidsoap code into station configuration. Attackers can inject #{process.run()} expressions into playlist URLs or station metadata fields that execute shell commands as the azuracast user when the station restarts.
Technical POC Analysis
Evidence base: GitHub Security Advisory GHSA-93fx-5qgc-wr38 (reporter q1uf3ng, published Mar 8 2026).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
AzuraCast deployments running version 0.23.3 or earlier are affected by a high-severity flaw that lets station media or profile administrators trigger arbitrary code execution on the server when the affected station's Liquidsoap service restarts. No vendor-released patch identified at time of analysis, and publicly available exploit code exists, creating a credible insider or compromised-account risk that can disrupt radio automation, expose data, and give attackers control of the azuracast service account. Security leadership should prioritize asset inventory, permission reduction, and monitoring of station configuration changes until a fix is released.
No vendor-released patch identified at time of analysis. Interim mitigations: restrict StationPermissions::Media and StationPermissions::Profile to trusted users; temporarily disable playlist remote URL and station metadata editing for non-essential accounts; validate or strip Liquidsoap interpolation sequences (#{...}) from all user-supplied configuration fields; monitor generated .liq files and Liquidsoap restarts for unexpected changes; run the azuracast service account with least privilege and isolate it from sensitive systems; audit existing metadata and remote URLs for suspicious #{...} content.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Code injection occurs when an application accepts user input and passes it directly into a language interpreter or evaluator without proper sanitization.
Remote Code Execution represents the critical moment when an attacker successfully runs arbitrary code on a target system without physical access.
Related Vulnerabilities in AzuraCast SSRF, Injection, and Access Control Flaws
View all 11Improper Restriction of Excessive Authentication Attempts in GitHub repository azuracast/azuracast prior to 0.18.3. Rate
Cross-site Scripting (XSS) - Stored in GitHub repository azuracast/azuracast prior to 0.18. Rated medium severity (CVSS
Remote code execution in AzuraCast ≤0.23.8 is reachable by any authenticated station manager due to a serialization grou
Unauthenticated HTTP requests to AzuraCast 0.23.1's internal sftpgo integration endpoints (/api/internal/sftp-auth and /
EUVD-2026-87822
GHSA-64wj-2chj-3r96
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB