☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]

CVE-2025-22138

CVE-2025-22138 Information Disclosure in Codidact
📅 PUBLISHED: 2025-01-13 20:34 UTC 🔄 UPDATED: 2026-09-23 20:33 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: None
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.39%
👁️
0.39% probability
9.6× above the median CVE
Tier: ELEVATED
30-day exploitation window · FIRST.org · updated daily
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS SEVERITY SCALE
9.0–10.0 CRITICAL
7.0–8.9 HIGH
4.0–6.9 MEDIUM
0.1–3.9 LOW
0.0 NONE
5.1
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2025-22138 is an information disclosure vulnerability in Codidact QPixel, a Q&A-based community knowledge-sharing platform. The flaw allows unprivileged or anonymous users to view suggested edits within categories that have been set to private or limited-visibility via the admin tools. This bypasses the intended access controls, potentially exposing sensitive content that administrators believed to be restricted. As of the latest advisory, no patch or workaround is available, and the vendor recommends against using private categories for storing sensitive information.

⚡ AUTOMATE YOUR CVE INTELLIGENCE

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.

›Patch confidence — UNVERIFIED to CONFIRMED, cross-referenced NVD + RHSA + Debian
›Exploit & PoC — poc_status, poc_url, has_exploit. Not in NVD.
›Shodan dorks — ready-made queries to find exposed vulnerable systems
›Detection rules — YARA · Wazuh · Elastic (all plans) · Sigma (Pro)
›pending_fields — know exactly which of 7 fields NVD hasn't processed yet
›Free backfill — data incomplete when you paid? Re-check within 30 days = 0 credits
PAYG €0.08/lookup Standard €19/mo (was €29) · 5k credits Pro €65/mo (was €99) · 20k credits FOUNDING PRICE · LOCKED FOR LIFE · ENDS 31 DEC 2026
[ FROM €19/MO ]
Free sandbox key available
No signup required

Supply Chain & Package Security

This vulnerability affects the @codidact/qpixel package. Since no patch is available, users of this package are at risk. The package is not hosted on a public registry like npm, but is available via the Codidact development repository. Organizations using QPixel should treat this as a high-priority supply chain risk and consider temporary mitigations such as disabling the suggested edit queue or implementing external access controls (e.g., reverse proxy authentication).

CVSS Breakdown & Threat Level

  • CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:N/A:N
  • Base Score: 5.3 (Medium)
  • Attack Vector: Network (AV:N)
  • Attack Complexity: Low (AC:L)
  • Privileges Required: None (PR:N)
  • User Interaction: None (UI:N)
  • Scope: Unchanged (S:U)
  • Confidentiality Impact: Low (C:L) – Exposure of suggested edit content, which may contain sensitive information.
  • Integrity Impact: None (I:N)
  • Availability Impact: None (A:N)

Threat Level: Medium. The vulnerability is easy to exploit remotely without authentication, but the impact is limited to information disclosure. However, if private categories contain sensitive data (e.g., internal discussions, draft policies), the actual risk may be higher.

Deep Dive & Mechanics

The vulnerability resides in the suggested edit queue functionality of QPixel. When a category is configured as private or limited-visibility, the platform is supposed to restrict access to content within that category to authorized users only. However, the suggested edit queue does not enforce these category-level access controls. As a result, any user (including unauthenticated visitors) can view suggested edits that belong to restricted categories by accessing the /suggested-edits endpoint.

The root cause is likely a missing authorization check in the controller or view that renders the suggested edit queue. The code probably fetches all pending suggested edits without filtering based on the visibility of the associated category. This is a classic case of improper access control (CWE-200).

Vulnerable vs. Patched Code

Since no patch is available, we can only hypothesize the vulnerable code pattern and the expected fix.

Vulnerable Code (Hypothetical):

# app/controllers/suggested_edits_controller.rb
def index
  @suggested_edits = SuggestedEdit.where(status: 'pending')
  # Missing: filter by category visibility
end

Patched Code (Expected):

# app/controllers/suggested_edits_controller.rb
def index
  @suggested_edits = SuggestedEdit.joins(:category)
                                  .where(status: 'pending')
                                  .where(categories: { visibility: 'public' })
  # Or use a scope that respects user permissions
end

The fix would involve joining the categories table and filtering out suggested edits from non-public categories unless the current user has the appropriate permissions.

Exploitation & Lab Setup

Red Team (Exploitation)

Prerequisites:

  • A running instance of QPixel with at least one private category and a pending suggested edit in that category.
  • No authentication required.

Steps:

  1. Identify the QPixel instance (e.g., https://target.qpixel.com).
  2. Navigate to the suggested edit queue: https://target.qpixel.com/suggested-edits.
  3. If the queue is paginated, iterate through pages to find edits from private categories.
  4. View the content of the suggested edit, which may include sensitive information.

Example Request:

GET /suggested-edits HTTP/1.1
Host: target.qpixel.com
User-Agent: Mozilla/5.0
Accept: text/html

Automation Script (Python):

import requests

target = "https://target.qpixel.com"
response = requests.get(f"{target}/suggested-edits")
if response.status_code == 200:
    # Parse HTML to extract suggested edit IDs and content
    print("Vulnerable: Access to suggested edits obtained.")
else:
    print("Not vulnerable or access denied.")

Blue Team (Detection & Defense)

Detection:

  • Monitor access logs for requests to /suggested-edits from unauthenticated users.
  • Alert on unusual patterns, such as rapid pagination through the suggested edit queue.

Defense:

  • Implement a reverse proxy (e.g., Nginx) to require authentication for the /suggested-edits path.
  • Temporarily disable the suggested edit feature by modifying the application code or configuration.
  • Use Web Application Firewall (WAF) rules to block access to /suggested-edits for unauthenticated users.

Nginx Rule Example:

location /suggested-edits {
    satisfy any;
    allow 192.168.1.0/24;
    deny all;
    # Or use auth_basic
}

Indicators of Compromise (IOCs)

  • URL Pattern: /suggested-edits accessed by unauthenticated users.
  • Log Entries: HTTP 200 responses to /suggested-edits from IPs not in the allowed user base.
  • User-Agent: Any standard browser User-Agent (no specific pattern).
  • Timing: Requests may be spaced out to avoid rate limiting.

Detection Engineering

YARA Rule

rule CVE_2025_22138_SuggestedEdits_Access {
    meta:
        description = "Detects access to QPixel suggested edit queue by unauthenticated users"
        author = "Valters IT"
        date = "2025-04-10"
        cve = "CVE-2025-22138"
    strings:
        $url = "/suggested-edits"
        $method = "GET"
    condition:
        $url and $method
}

Sigma Rule

title: CVE-2025-22138 - Unauthenticated Access to QPixel Suggested Edits
id: 8a4b3c2d-1e5f-4a7b-9c8d-0e1f2a3b4c5d
status: experimental
description: Detects unauthenticated HTTP GET requests to /suggested-edits on QPixel instances.
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: apache
    service: access
detection:
    selection:
        cs-method: 'GET'
        cs-uri-stem: '/suggested-edits'
    condition: selection
falsepositives:
    - Legitimate unauthenticated users if the feature is intentionally public
level: medium

Suricata Rule

alert http any any -> any any (msg:"CVE-2025-22138 - QPixel Suggested Edit Queue Access"; flow:to_server; http.method; content:"GET"; http.uri; content:"/suggested-edits"; classtype:attempted-recon; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Disable the suggested edit feature if not critical to operations. This can be done by removing the route or modifying the controller to return a 403 for all requests.
  2. Implement access controls at the reverse proxy level (e.g., Nginx, Apache) to require authentication for /suggested-edits.
  3. Review private categories for any sensitive information that may have been exposed and rotate credentials or update content as needed.

Long-Term Fix:

  • Monitor the Codidact development repository for a patch.
  • Once a patch is released, apply it immediately and test the fix.
  • Consider contributing a fix to the open-source project if you have the resources.

Workarounds:

  • None officially provided. The vendor advises against using private categories for sensitive data.

Valters IT
Senior DevSecOps & Cyber Threat Intelligence Expert

◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2025-22138/ · CVE data: NVD/MITRE (public domain) · © 2026 ValtersIT Hub
>_ SYSTEM_CORE: INTEL_ACTIVE
90% TEAM-CURATED // 10% AUTOMATED INGESTION.
ALL PATCH REFERENCES AND VERSION DATA SOURCED FROM NVD + OSV OFFICIAL REGISTRIES.