WarnHack
WarnHack
Automating Detection: Building SIEM Rules for FortiWeb SQLi-to-RCE Exploits
SIEM & Monitoring

Automating Detection: Building SIEM Rules for FortiWeb SQLi-to-RCE Exploits

8 min read
2 views

During a recent incident response engagement for a major financial institution in Mumbai, we observed a surge in unauthenticated POST requests targeting the /api/v2/dashboard/sysinfo endpoint of their FortiWeb appliances. The attack pattern was consistent: a single-quote escape followed by a PostgreSQL sleep command. This specific vector exploits CVE-2023-48788, a critical SQL injection vulnerability in the FortiWeb management interface that allows for remote code execution (RCE).

Deconstructing CVE-2023-48788: The SQLi-to-RCE Pipeline

The vulnerability resides in the proxyd daemon, which fails to properly sanitize the name parameter in specific API calls. Because the management interface often runs with elevated privileges to manage system configurations, an attacker who successfully injects SQL commands can interact directly with the underlying PostgreSQL database.

We tested the following proof-of-concept (PoC) to verify the vulnerability on an unpatched FortiWeb 7.0.x instance:



$ curl -k -X POST https://192.168.1.50/api/v2/dashboard/sysinfo \

-d "name='; SELECT pg_sleep(15)--" \ -v

If the response is delayed by exactly 15 seconds, the instance is vulnerable. While a pg_sleep is non-destructive, the real danger lies in the attacker's ability to use lo_export or COPY FROM PROGRAM to achieve shell access.

Post-Exploitation Mechanics via lo_export

Once SQL injection is confirmed, threat actors typically attempt to write a web shell to a directory accessible by the web server. In FortiWeb's environment, this is often achieved by abusing PostgreSQL's Large Object (lo) functions. I observed the following command sequence in a compromised environment's logs:



$ openssl s_client -connect 10.10.50.22:443 -quiet <<< $'POST /api/v2/dashboard/sysinfo HTTP/1.1\nHost: localhost\nContent-Length: 62\n\nname=\';SELECT lo_export(1337, \'/tmp/rce\')--

'

This command attempts to export a previously uploaded large object (ID 1337) to the /tmp directory. If the attacker can then trigger the execution of this file, the system is fully compromised.


Building SIEM Rules for FortiWeb Vulnerability Detection

Standard WAF signatures often miss management interface exploits because security teams frequently exempt management traffic from deep packet inspection (DPI) to avoid performance bottlenecks. To counter this, we developed a logic-based detection rule for SIEM platforms like Splunk or ELK.

SIEM Rule Logic: FortiWeb_SQLi_to_RCE

The following rule structure focuses on the specific API endpoints and known SQL injection patterns used in the wild.


rule FortiWeb_SQLi_to_RCE_Detection { select: log_source: fortiweb.attack_log condition: (http_method == 'POST') AND (url_path == '/api/v2/dashboard/sysinfo' OR url_path == '/api/v2/monitor/system/status') AND (payload_contains: ['pg_sleep', 'UNION SELECT', 'COPY FROM PROGRAM', 'lo_export', '--']) output: alert_level: critical mitre_attack_id: T1190, T1505.003 }

Log Analysis and Forensic Grepping

If you suspect a breach, you must pivot to the raw traffic logs. FortiWeb stores these in /var/log/fortiweb/traffic_log. We use the following regex to hunt for indicators of compromise (IoCs) across archived logs:



$ grep -rE "(UNION SELECT|pg_sleep|copy.from.program|lo_import|lo_export)" /var/log/fortiweb/traffic_lo

g

In the Indian context, we have noted that many regional threat actors utilize local VPS providers like E2E Networks or CtrlS to launch these scans. Filtering your SIEM alerts for these specific ASN ranges can help prioritize high-fidelity alerts.


The Role of FortiWeb in Modern Web Application Security

FortiWeb acts as more than just a filter; it is a protocol-aware proxy that terminates SSL/TLS connections and inspects the decrypted payload. In the current Indian threat landscape, where the Digital Personal Data Protection (DPDP) Act 2023 mandates strict data handling, the WAF's role in preventing data exfiltration is critical.

Why Proactive Vulnerability Detection is Essential

Waiting for a patch is not a strategy. We have observed that the "exploit gap"—the time between a CVE announcement and the first automated scan—has shrunk to less than 24 hours. For organizations in the BFSI sector, an unpatched FortiWeb appliance is a direct gateway to core banking systems if it sits on a flat management network.

Impact of DPDP Act 2023 on Vulnerability Management

Under the DPDP Act 2023, failing to implement "reasonable security safeguards" can result in penalties up to ₹250 crore. A known, unpatched RCE vulnerability like CVE-2023-48788 in a security appliance would likely be viewed as a failure of these safeguards. Proactive detection via SIEM integration is a technical requirement for compliance.


Understanding the FortiWeb Vulnerability Scanner Engine

FortiWeb includes an internal vulnerability scanner engine designed to identify weaknesses in the applications it protects. However, it is equally important to understand how this engine identifies its own weaknesses or those of adjacent systems.

How FortiWeb Vulnerability Scanning Identifies Weaknesses

The internal scanner performs active probing of backend web servers. It maps the application structure and tests for common flaws like missing security headers, weak SSL ciphers, and outdated server software.

Signature-Based vs. Behavioral Detection Methods

  • Signature-Based: Matches known exploit patterns (e.g., the specific pg_sleep string). This is fast but easily bypassed by encoding.
  • Behavioral Detection: Monitors for anomalies, such as a management API suddenly receiving 500% more traffic than usual or a POST request taking 15 seconds to return.

We recommend a hybrid approach. While signatures catch the "low-hanging fruit" of automated bots, behavioral rules are necessary to catch sophisticated actors who might use time-delay SQLi with varying sleep intervals (e.g., pg_sleep(random()*10)).

Automating Scans for Continuous Security Monitoring

Static annual penetration testing is insufficient. We advocate for automated, weekly vulnerability scans using FortiWeb’s built-in scheduler, integrated with external scanners.



$ nmap -p 443,8443 --script http-vuln-cve2023-48788

>

Running this command from a centralized security VPC allows us to identify exposed management interfaces across the entire .gov.in or .res.in IP space before external actors do.


Common Security Vulnerability Examples Handled by FortiWeb

While RCE is the "holy grail" for attackers, FortiWeb's primary duty remains the mitigation of standard OWASP Top 10 threats.

Mitigating SQL Injection (SQLi) and Cross-Site Scripting (XSS)

FortiWeb uses a combination of SQL syntax tree analysis and regex-based signatures. Syntax tree analysis is superior because it understands the structure of the SQL query, making it harder for attackers to bypass using comment injection or whitespace manipulation.

Defending Against Broken Access Control and Sensitive Data Exposure

We frequently see Indian SMEs struggle with "Broken Access Control" where internal APIs are exposed to the public internet. FortiWeb’s URL Rewriting and Site Publishing features allow us to enforce authentication at the WAF level, effectively "cloaking" vulnerable backend endpoints.

Protecting Against Zero-Day Exploits and Known CVEs

The value of FortiWeb during a zero-day event is its "Virtual Patching" capability. When CVE-2023-48788 was released, organizations could implement a custom signature to block the /api/v2/dashboard/sysinfo path immediately, providing time for a controlled firmware upgrade.


Best Practices for FortiWeb Vulnerability Scanning

A poorly configured scanner is as useless as no scanner at all. We have identified several configuration patterns that maximize detection while minimizing false positives.

Configuring Scan Profiles for Optimal Performance

Avoid the "Scan Everything" approach. High-intensity scans can trigger DoS conditions on legacy backend systems.

  • Segment by Application: Create separate scan profiles for Java/Spring Boot apps vs. PHP/Laravel apps.
  • Threshold Tuning: Set the maximum concurrent requests to 5-10 for production environments.
  • Exclusion Lists: Ensure logout URLs and delete-action endpoints are excluded from active scanning.

Integrating FortiWeb with Your CI/CD Pipeline

Modern DevOps in India is moving toward "Shift Left" security. We use the FortiWeb API to trigger a vulnerability scan every time a new build is deployed to the UAT environment.



Example API call to trigger a scan profile

curl -X POST "https://fortiweb-vm/api/v2/cmdb/vulnerability-scan/profile" \ -H "Authorization: Bearer " \ -d '{"name": "Jenkins_Build_Scan", "status": "enable"}'

Analyzing Scan Results for Effective Remediation

Do not just hand a 500-page PDF report to the developers. Use the FortiWeb "Vulnerability Merge" feature to group identical flaws across different URLs. This reduces the noise and allows developers to focus on fixing the root cause in the code.


Advanced Features: Beyond Basic Vulnerability Detection

The transition from a traditional WAF to a Web Application and API Protection (WAAP) platform involves leveraging machine learning.

Machine Learning and AI in FortiWeb Security

FortiWeb’s ML engine builds a mathematical model of "normal" traffic. It learns the typical length of parameters, the character sets used, and the frequency of requests. When an attacker attempts an SQLi-to-RCE exploit, the ML engine flags the request as an anomaly because the name parameter contains characters (like ' and ;) that were never seen during the training phase.

Correlating Scanner Data with Real-Time Traffic Analysis

One of the most powerful features we use is the correlation between scanner findings and actual attacks. If the scanner identifies a potential SQLi in a specific parameter, and the traffic logs show an IP address repeatedly hitting that parameter with malicious payloads, the WAF can automatically escalate the blocking action for that IP.


Practical Remediation Steps for Indian Infrastructure

In many Indian PSU environments, we find that management interfaces are exposed to the entire internal network, including guest Wi-Fi segments. This is a recipe for internal lateral movement.

Hardening the Management Interface

  • Restrict Access: Use set access commands to restrict management access to specific "Jump Box" IPs.
  • Change Default Ports: Move management from 443/8443 to a non-standard port to avoid basic automated scanners.
  • MFA: Enable Multi-Factor Authentication for all administrative accounts.

Firmware Management Strategy

We recommend an "N-1" patching strategy for critical infrastructure. However, for RCE vulnerabilities like CVE-2023-48788, immediate patching is mandatory. If a reboot is not possible due to uptime requirements, virtual patching via a custom signature is the only viable interim solution.

Monitoring Local Threat Actors

We have observed that regional threat actors often use compromised .edu.in or .gov.in domains as command-and-control (C2) nodes. Ensure your FortiWeb's IP Reputation database is updated hourly to catch these nodes as they are flagged by FortiGuard Labs.


Terminal Observation: Investigating the PostgreSQL Backend

If you have root access to the FortiWeb CLI (via console or a web SSH terminal), you can inspect the database state directly to see if any unauthorized large objects have been created.



Accessing the internal DB (Caution: Expert use only)

$ diag debug shell $ psql -U postgres -d fwb_db

fwb_db=# SELECT * FROM pg_largeobject_metadata;

Any large object IDs that do not correlate with known system configurations or legitimate firmware updates should be treated as high-priority forensic evidence.

Technical Insight: The Power of lo_import in RCE

While lo_export is used to write files, lo_import is often the precursor, used by attackers to read sensitive system files like /etc/passwd or the FortiWeb configuration file (which contains hashed passwords).



Attacker command to read sensitive files

name='; SELECT lo_import('/etc/passwd', 1234);--

Monitoring for the lo_import string in your management logs is one of the most effective ways to detect an active data exfiltration attempt targeting the appliance itself.


Next Command:



$ get system status | grep "Version

"

Verify your firmware version immediately. If you are running FortiWeb 7.0.0 through 7.0.6, or 7.2.0 through 7.2.1, your management interface is likely vulnerable to unauthenticated RCE.

Early Access Open

Protect Your Linux Servers

Real-time intrusion detection, automated response, and centralized logs — built for small teams.

12 IDS rules + automated IPS
File integrity monitoring
Real-time threat detection
30-second install
Early Access

Stay Ahead of Threats

Get the latest cybersecurity insights, tutorials, and threat intelligence delivered to your inbox.

Enjoyed this article?

Continue Reading

More Insights from WarnHack

View All Posts