Local privilege escalation in QRadar due to run-result-reader.sh insecure file permissions
It was found that the nobody user is owner of the run-result-reader.sh script. This script is executed by the root user's crontab. Due to this it is possible for any process running as nobody to add commands to this script that will be executed with root privileges. In combination with a code execution vulnerability in QRadar's web application, this can be used for attacker's to gain full control of the QRadar system.
This issue was successfully verified on QRadar Community Edition version 184.108.40.206 (7.3.1 Build 20180723171558).
IBM has released the following versions of QRader in which this issue has been resolved:
- QRadar / QRM / QVM / QNI 7.4.0 GA (SFS)
- QRadar / QRM / QVM / QRIF / QNI 7.3.3 Patch 3 (SFS)
- QRadar / QRM / QVM / QRIF / QNI 7.3.2 Patch 7 (SFS)
- QRadar Incident Forensics 7.4.0 (ISO)
- QRadar Incident Forensics 7.4.0 (SFS)
QRadar is IBM's enterprise SIEM solution. A free version of QRadar is available that is known as QRadar Community Edition. This version is limited to 50 events per second and 5,000 network flows a minute, supports apps, but is based on a smaller footprint for non-enterprise use.
A local privilege escalation vulnerability was found in QRadar. This vulnerability is possible because the script located at /opt/qvm/iem/bin/run-result-reader.sh is configured with weak file permissions. The owner of the script is set to the nobody user, which is a low privileged system account use by various services - including QRadar's web application.
The script is also started by the root user's crontab. This means that if an attacker manages to gain access to the QRadar system as the nobody user, it would be possible to escalate privileges to root. This is for example possible by exploiting a code execution vulnerability in QRadar's web application.
The crontab of the root user contains various entries to run commands on different moments. One of these entries will run the run-result-reader.sh script every 20 minutes:
# crontab -l
# Update the Endpoint Manager Fixlet Action Results
*/20 * * * * /opt/qvm/iem/bin/run-result-reader.sh > /var/log/iem-cron.log 2>&1
This script is owned by the nobody user, meaning that this user fully controls the script and thus fully controls which commands will be executed.
# ls -la /opt/qvm/iem/bin/run-result-reader.sh
-rwxr-xr-x 1 nobody nobody 2592 Sep 12 17:40 /opt/qvm/iem/bin/run-result-reader.sh
If the (modified) script is run from root's crontab, the commands within the script will be executed with root privileges. Due to this it is possible for the nobody to exploit this issue to gain root privileges and gain full control of the QRadar system.