CVE-2025-48868

7.2 HIGH

📋 TL;DR

Horilla HRMS version 1.3.0 contains an authenticated Remote Code Execution vulnerability where privileged users (like administrators) can execute arbitrary system commands on the server. The vulnerability exists due to unsafe use of Python's eval() function on user-controlled query parameters in the project_bulk_archive view. This affects all Horilla 1.3.0 installations with authenticated privileged users.

💻 Affected Systems

Products:
  • Horilla HRMS
Versions: 1.3.0 only
Operating Systems: All platforms running Horilla
Default Config Vulnerable: ⚠️ Yes
Notes: Requires authenticated privileged user access (e.g., administrator). DEBUG=True makes exploitation easier but not required.

📦 What is this software?

⚠️ Risk & Real-World Impact

🔴

Worst Case

Full server compromise leading to data theft, lateral movement, ransomware deployment, or complete system takeover.

🟠

Likely Case

Privileged user executes commands to exfiltrate sensitive HR data, install backdoors, or disrupt operations.

🟢

If Mitigated

Limited impact due to network segmentation, minimal privileges, and strong authentication controls.

🌐 Internet-Facing: HIGH - If Horilla is exposed to the internet, attackers can exploit authenticated sessions to gain full server control.
🏢 Internal Only: HIGH - Even internally, malicious insiders or compromised accounts can execute arbitrary commands.

🎯 Exploit Status

Public PoC: ⚠️ Yes
Weaponized: LIKELY
Unauthenticated Exploit: ✅ No
Complexity: LOW

Exploitation requires authenticated privileged access. Public proof-of-concept exists in security advisories.

🛠️ Fix & Mitigation

✅ Official Fix

Patch Version: 1.3.1

Vendor Advisory: https://github.com/horilla-opensource/horilla/security/advisories/GHSA-h6qj-pwmx-wjhw

Restart Required: Yes

Instructions:

1. Backup your Horilla instance and database. 2. Update Horilla to version 1.3.1 via pip: 'pip install horilla==1.3.1'. 3. Restart the Horilla application server. 4. Verify the fix by checking the version.

🔧 Temporary Workarounds

Disable project_bulk_archive endpoint

all

Temporarily disable or restrict access to the vulnerable view until patching.

Modify Django URL routing to remove/restrict access to project_bulk_archive

Implement WAF rules

all

Block requests containing eval() or suspicious Python commands in query parameters.

Add WAF rule: 'block if request_uri contains eval(' or contains '__import__'

🧯 If You Can't Patch

  • Restrict privileged user accounts to only trusted personnel and implement multi-factor authentication.
  • Implement network segmentation to isolate Horilla servers from critical infrastructure.

🔍 How to Verify

Check if Vulnerable:

Check Horilla version: if version is exactly 1.3.0, the system is vulnerable.

Check Version:

pip show horilla | grep Version

Verify Fix Applied:

Verify Horilla version is 1.3.1 or higher and test that eval() is no longer used in project_bulk_archive.

📡 Detection & Monitoring

Log Indicators:

  • Unusual Python eval() calls in application logs
  • Suspicious commands in query parameters to project_bulk_archive
  • Unexpected process execution from Horilla user

Network Indicators:

  • HTTP requests with Python code in query parameters
  • Outbound connections from Horilla server to unknown IPs

SIEM Query:

source="horilla_logs" AND (message="eval" OR message="__import__" OR message="os.system")

🔗 References

📤 Share & Export