CVE-2026-78691 (GCVE-0-2026-78691)

Vulnerability from cvelistv5 – Published: 2026-08-30 11:55 – Updated: 2026-08-31 14:57
VLAI
Title
Unescaped backslash allows LIKE wildcard injection in AshSql string search
Summary
Improper Neutralization of Special Elements in Data Query Logic vulnerability in ash-project ash_sql allows a user who supplies a search term to contains/2, string_starts_with/2, or string_ends_with/2 to inject live SQL LIKE wildcards, turning a literal substring search into an attacker-controlled pattern match. The escape helpers in AshSql.Expr prefix % and _ with a backslash but never escape a backslash already present in the input. Because backslash is the default LIKE escape character, the escaping defeats itself: the input \% becomes the pattern fragment \\%, where \\ is a literal backslash and the attacker's % remains a live wildcard. The search value stays parameterized, so this is confined to the LIKE pattern grammar rather than full SQL. An attacker can widen matches to probe values, slip past a negated contains(...) guard, or crash the query with a trailing lone backslash. This issue affects ash_sql: from 0.1.1-rc.10 before 0.7.1.
SSVC
Exploitation: poc Automatable: no Technical Impact: partial
CISA Coordinator · CISA-ADP (v2.0.3)
Decision recorded 2026-08-31 14:57 UTC
CWE
  • CWE-943 - Improper Neutralization of Special Elements in Data Query Logic
Assigner
Impacted products
Vendor Product Version CPE status
ash-project ash_sql Affected: 0.1.1-rc.10 , < 0.7.1 (semver)
    cpe:2.3:a:ash-project:ash_sql:*:*:*:*:*:*:*:*
Create a notification for this product.
ash-project ash_sql Affected: cfc7da474c5be2190fd62664a83a689377a8d512 , < d95c55c64b1b42cc2fd30211a4913f3145156cd4 (git)
    cpe:2.3:a:ash-project:ash_sql:*:*:*:*:*:*:*:*
Create a notification for this product.
Show details on NVD website

{
  "containers": {
    "adp": [
      {
        "metrics": [
          {
            "other": {
              "content": {
                "id": "CVE-2026-78691",
                "options": [
                  {
                    "Exploitation": "poc"
                  },
                  {
                    "Automatable": "no"
                  },
                  {
                    "Technical Impact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-08-31T14:57:20.454917Z",
                "version": "2.0.3"
              },
              "type": "ssvc"
            }
          }
        ],
        "providerMetadata": {
          "dateUpdated": "2026-08-31T14:57:41.423Z",
          "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
          "shortName": "CISA-ADP"
        },
        "references": [
          {
            "tags": [
              "exploit"
            ],
            "url": "https://github.com/ash-project/ash_sql/security/advisories/GHSA-5jgp-7mhc-6qqh"
          }
        ],
        "title": "CISA ADP Vulnrichment"
      }
    ],
    "cna": {
      "affected": [
        {
          "collectionURL": "https://repo.hex.pm",
          "cpes": [
            "cpe:2.3:a:ash-project:ash_sql:*:*:*:*:*:*:*:*"
          ],
          "defaultStatus": "unaffected",
          "modules": [
            "\u0027Elixir.AshSql.Expr\u0027"
          ],
          "packageName": "ash_sql",
          "packageURL": "pkg:hex/ash_sql",
          "product": "ash_sql",
          "programFiles": [
            "lib/expr.ex"
          ],
          "programRoutines": [
            {
              "name": "\u0027Elixir.AshSql.Expr\u0027:escape_contains/1"
            },
            {
              "name": "\u0027Elixir.AshSql.Expr\u0027:escape_starts_with/1"
            },
            {
              "name": "\u0027Elixir.AshSql.Expr\u0027:escape_ends_with/1"
            }
          ],
          "repo": "https://github.com/ash-project/ash_sql",
          "vendor": "ash-project",
          "versions": [
            {
              "lessThan": "0.7.1",
              "status": "affected",
              "version": "0.1.1-rc.10",
              "versionType": "semver"
            }
          ]
        },
        {
          "collectionURL": "https://github.com",
          "cpes": [
            "cpe:2.3:a:ash-project:ash_sql:*:*:*:*:*:*:*:*"
          ],
          "defaultStatus": "unaffected",
          "modules": [
            "\u0027Elixir.AshSql.Expr\u0027"
          ],
          "packageName": "ash-project/ash_sql",
          "packageURL": "pkg:github/ash-project/ash_sql",
          "product": "ash_sql",
          "programFiles": [
            "lib/expr.ex"
          ],
          "programRoutines": [
            {
              "name": "\u0027Elixir.AshSql.Expr\u0027:escape_contains/1"
            },
            {
              "name": "\u0027Elixir.AshSql.Expr\u0027:escape_starts_with/1"
            },
            {
              "name": "\u0027Elixir.AshSql.Expr\u0027:escape_ends_with/1"
            }
          ],
          "repo": "https://github.com/ash-project/ash_sql",
          "vendor": "ash-project",
          "versions": [
            {
              "lessThan": "d95c55c64b1b42cc2fd30211a4913f3145156cd4",
              "status": "affected",
              "version": "cfc7da474c5be2190fd62664a83a689377a8d512",
              "versionType": "git"
            }
          ]
        }
      ],
      "configurations": [
        {
          "lang": "en",
          "supportingMedia": [
            {
              "base64": false,
              "type": "text/html",
              "value": "\u003cp\u003eAn application must pass untrusted input as the search term of \u003ccode\u003econtains/2\u003c/code\u003e, \u003ccode\u003estring_starts_with/2\u003c/code\u003e, or \u003ccode\u003estring_ends_with/2\u003c/code\u003e (for example a user-controlled substring search).\u003c/p\u003e"
            },
            {
              "base64": false,
              "type": "text/markdown",
              "value": "An application must pass untrusted input as the search term of `contains/2`, `string_starts_with/2`, or `string_ends_with/2` (for example a user-controlled substring search)."
            }
          ],
          "value": "An application must pass untrusted input as the search term of contains/2, string_starts_with/2, or string_ends_with/2 (for example a user-controlled substring search)."
        }
      ],
      "cpeApplicability": [
        {
          "nodes": [
            {
              "cpeMatch": [
                {
                  "criteria": "cpe:2.3:a:ash-project:ash_sql:*:*:*:*:*:*:*:*",
                  "versionEndExcluding": "0.7.1",
                  "versionStartIncluding": "0.1.1-rc.10",
                  "vulnerable": true
                }
              ],
              "negate": false,
              "operator": "OR"
            }
          ],
          "operator": "AND"
        }
      ],
      "credits": [
        {
          "lang": "en",
          "type": "finder",
          "value": "Peter Ullrich"
        },
        {
          "lang": "en",
          "type": "reporter",
          "value": "Peter Ullrich"
        },
        {
          "lang": "en",
          "type": "remediation developer",
          "value": "Zach Daniel / Ash Project"
        },
        {
          "lang": "en",
          "type": "coordinator",
          "value": "Jonatan M\u00e4nnchen / EEF"
        }
      ],
      "descriptions": [
        {
          "lang": "en",
          "supportingMedia": [
            {
              "base64": false,
              "type": "text/html",
              "value": "\u003cp\u003eImproper Neutralization of Special Elements in Data Query Logic vulnerability in ash-project ash_sql allows a user who supplies a search term to \u003ccode\u003econtains/2\u003c/code\u003e, \u003ccode\u003estring_starts_with/2\u003c/code\u003e, or \u003ccode\u003estring_ends_with/2\u003c/code\u003e to inject live SQL \u003ccode\u003eLIKE\u003c/code\u003e wildcards, turning a literal substring search into an attacker-controlled pattern match.\u003c/p\u003e\n\u003cp\u003eThe escape helpers in \u003ccode\u003eAshSql.Expr\u003c/code\u003e prefix \u003ccode\u003e%\u003c/code\u003e and \u003ccode\u003e_\u003c/code\u003e with a backslash but never escape a backslash already present in the input. Because backslash is the default \u003ccode\u003eLIKE\u003c/code\u003e escape character, the escaping defeats itself: the input \u003ccode\u003e\\%\u003c/code\u003e becomes the pattern fragment \u003ccode\u003e\\\\%\u003c/code\u003e, where \u003ccode\u003e\\\\\u003c/code\u003e is a literal backslash and the attacker\u0027s \u003ccode\u003e%\u003c/code\u003e remains a live wildcard. The search value stays parameterized, so this is confined to the LIKE pattern grammar rather than full SQL. An attacker can widen matches to probe values, slip past a negated \u003ccode\u003econtains(...)\u003c/code\u003e guard, or crash the query with a trailing lone backslash.\u003c/p\u003e\n\u003cp\u003eThis issue affects ash_sql: from 0.1.1-rc.10 before 0.7.1.\u003c/p\u003e"
            },
            {
              "base64": false,
              "type": "text/markdown",
              "value": "Improper Neutralization of Special Elements in Data Query Logic vulnerability in ash-project ash_sql allows a user who supplies a search term to `contains/2`, `string_starts_with/2`, or `string_ends_with/2` to inject live SQL `LIKE` wildcards, turning a literal substring search into an attacker-controlled pattern match.\n\nThe escape helpers in `AshSql.Expr` prefix `%` and `_` with a backslash but never escape a backslash already present in the input. Because backslash is the default `LIKE` escape character, the escaping defeats itself: the input `\\%` becomes the pattern fragment `\\\\%`, where `\\\\` is a literal backslash and the attacker\u0027s `%` remains a live wildcard. The search value stays parameterized, so this is confined to the LIKE pattern grammar rather than full SQL. An attacker can widen matches to probe values, slip past a negated `contains(...)` guard, or crash the query with a trailing lone backslash.\n\nThis issue affects ash_sql: from 0.1.1-rc.10 before 0.7.1."
            }
          ],
          "value": "Improper Neutralization of Special Elements in Data Query Logic vulnerability in ash-project ash_sql allows a user who supplies a search term to contains/2, string_starts_with/2, or string_ends_with/2 to inject live SQL LIKE wildcards, turning a literal substring search into an attacker-controlled pattern match.\n\nThe escape helpers in AshSql.Expr prefix % and _ with a backslash but never escape a backslash already present in the input. Because backslash is the default LIKE escape character, the escaping defeats itself: the input \\% becomes the pattern fragment \\\\%, where \\\\ is a literal backslash and the attacker\u0027s % remains a live wildcard. The search value stays parameterized, so this is confined to the LIKE pattern grammar rather than full SQL. An attacker can widen matches to probe values, slip past a negated contains(...) guard, or crash the query with a trailing lone backslash.\n\nThis issue affects ash_sql: from 0.1.1-rc.10 before 0.7.1."
        }
      ],
      "impacts": [
        {
          "capecId": "CAPEC-116",
          "descriptions": [
            {
              "lang": "en",
              "value": "CAPEC-116 Excavation"
            }
          ]
        }
      ],
      "metrics": [
        {
          "cvssV4_0": {
            "Automatable": "NOT_DEFINED",
            "Recovery": "NOT_DEFINED",
            "Safety": "NOT_DEFINED",
            "attackComplexity": "LOW",
            "attackRequirements": "PRESENT",
            "attackVector": "LOCAL",
            "baseScore": 2.1,
            "baseSeverity": "LOW",
            "privilegesRequired": "NONE",
            "providerUrgency": "NOT_DEFINED",
            "subAvailabilityImpact": "NONE",
            "subConfidentialityImpact": "NONE",
            "subIntegrityImpact": "NONE",
            "userInteraction": "NONE",
            "valueDensity": "NOT_DEFINED",
            "vectorString": "CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N",
            "version": "4.0",
            "vulnAvailabilityImpact": "NONE",
            "vulnConfidentialityImpact": "LOW",
            "vulnIntegrityImpact": "NONE",
            "vulnerabilityResponseEffort": "NOT_DEFINED"
          },
          "format": "CVSS",
          "scenarios": [
            {
              "lang": "en",
              "value": "GENERAL"
            }
          ]
        }
      ],
      "problemTypes": [
        {
          "descriptions": [
            {
              "cweId": "CWE-943",
              "description": "CWE-943 Improper Neutralization of Special Elements in Data Query Logic",
              "lang": "en",
              "type": "CWE"
            }
          ]
        }
      ],
      "providerMetadata": {
        "dateUpdated": "2026-08-30T11:55:20.331Z",
        "orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "shortName": "EEF"
      },
      "references": [
        {
          "tags": [
            "vendor-advisory",
            "related"
          ],
          "url": "https://github.com/ash-project/ash_sql/security/advisories/GHSA-5jgp-7mhc-6qqh"
        },
        {
          "tags": [
            "related"
          ],
          "url": "https://cna.erlef.org/cves/CVE-2026-78691.html"
        },
        {
          "tags": [
            "related"
          ],
          "url": "https://osv.dev/vulnerability/EEF-CVE-2026-78691"
        },
        {
          "tags": [
            "patch"
          ],
          "url": "https://github.com/ash-project/ash_sql/commit/d95c55c64b1b42cc2fd30211a4913f3145156cd4"
        }
      ],
      "source": {
        "discovery": "EXTERNAL"
      },
      "title": "Unescaped backslash allows LIKE wildcard injection in AshSql string search"
    }
  },
  "cveMetadata": {
    "assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
    "assignerShortName": "EEF",
    "cveId": "CVE-2026-78691",
    "datePublished": "2026-08-30T11:55:20.331Z",
    "dateReserved": "2026-08-30T05:45:01.818Z",
    "dateUpdated": "2026-08-31T14:57:41.423Z",
    "state": "PUBLISHED"
  },
  "dataType": "CVE_RECORD",
  "dataVersion": "5.2",
  "vulnerability-lookup:meta": {
    "epss": {
      "cve": "CVE-2026-78691",
      "date": "2026-09-26",
      "epss": "0.00197",
      "percentile": "0.08431"
    },
    "nvd": {
      "cve": {
        "affected": [
          {
            "affectedData": [
              {
                "collectionURL": "https://repo.hex.pm",
                "cpes": [
                  "cpe:2.3:a:ash-project:ash_sql:*:*:*:*:*:*:*:*"
                ],
                "defaultStatus": "unaffected",
                "modules": [
                  "\u0027Elixir.AshSql.Expr\u0027"
                ],
                "packageName": "ash_sql",
                "packageURL": "pkg:hex/ash_sql",
                "product": "ash_sql",
                "programFiles": [
                  "lib/expr.ex"
                ],
                "programRoutines": [
                  {
                    "name": "\u0027Elixir.AshSql.Expr\u0027:escape_contains/1"
                  },
                  {
                    "name": "\u0027Elixir.AshSql.Expr\u0027:escape_starts_with/1"
                  },
                  {
                    "name": "\u0027Elixir.AshSql.Expr\u0027:escape_ends_with/1"
                  }
                ],
                "repo": "https://github.com/ash-project/ash_sql",
                "vendor": "ash-project",
                "versions": [
                  {
                    "lessThan": "0.7.1",
                    "status": "affected",
                    "version": "0.1.1-rc.10",
                    "versionType": "semver"
                  }
                ]
              },
              {
                "collectionURL": "https://github.com",
                "cpes": [
                  "cpe:2.3:a:ash-project:ash_sql:*:*:*:*:*:*:*:*"
                ],
                "defaultStatus": "unaffected",
                "modules": [
                  "\u0027Elixir.AshSql.Expr\u0027"
                ],
                "packageName": "ash-project/ash_sql",
                "packageURL": "pkg:github/ash-project/ash_sql",
                "product": "ash_sql",
                "programFiles": [
                  "lib/expr.ex"
                ],
                "programRoutines": [
                  {
                    "name": "\u0027Elixir.AshSql.Expr\u0027:escape_contains/1"
                  },
                  {
                    "name": "\u0027Elixir.AshSql.Expr\u0027:escape_starts_with/1"
                  },
                  {
                    "name": "\u0027Elixir.AshSql.Expr\u0027:escape_ends_with/1"
                  }
                ],
                "repo": "https://github.com/ash-project/ash_sql",
                "vendor": "ash-project",
                "versions": [
                  {
                    "lessThan": "d95c55c64b1b42cc2fd30211a4913f3145156cd4",
                    "status": "affected",
                    "version": "cfc7da474c5be2190fd62664a83a689377a8d512",
                    "versionType": "git"
                  }
                ]
              }
            ],
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db"
          }
        ],
        "cveTags": [],
        "descriptions": [
          {
            "lang": "en",
            "value": "Improper Neutralization of Special Elements in Data Query Logic vulnerability in ash-project ash_sql allows a user who supplies a search term to contains/2, string_starts_with/2, or string_ends_with/2 to inject live SQL LIKE wildcards, turning a literal substring search into an attacker-controlled pattern match.\n\nThe escape helpers in AshSql.Expr prefix % and _ with a backslash but never escape a backslash already present in the input. Because backslash is the default LIKE escape character, the escaping defeats itself: the input \\% becomes the pattern fragment \\\\%, where \\\\ is a literal backslash and the attacker\u0027s % remains a live wildcard. The search value stays parameterized, so this is confined to the LIKE pattern grammar rather than full SQL. An attacker can widen matches to probe values, slip past a negated contains(...) guard, or crash the query with a trailing lone backslash.\n\nThis issue affects ash_sql: from 0.1.1-rc.10 before 0.7.1."
          }
        ],
        "id": "CVE-2026-78691",
        "lastModified": "2026-09-01T21:15:00.147",
        "metrics": {
          "cvssMetricV40": [
            {
              "cvssData": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "PRESENT",
                "attackVector": "LOCAL",
                "availabilityRequirement": "NOT_DEFINED",
                "baseScore": 2.1,
                "baseSeverity": "LOW",
                "confidentialityRequirement": "NOT_DEFINED",
                "exploitMaturity": "NOT_DEFINED",
                "integrityRequirement": "NOT_DEFINED",
                "modifiedAttackComplexity": "NOT_DEFINED",
                "modifiedAttackRequirements": "NOT_DEFINED",
                "modifiedAttackVector": "NOT_DEFINED",
                "modifiedPrivilegesRequired": "NOT_DEFINED",
                "modifiedSubAvailabilityImpact": "NOT_DEFINED",
                "modifiedSubConfidentialityImpact": "NOT_DEFINED",
                "modifiedSubIntegrityImpact": "NOT_DEFINED",
                "modifiedUserInteraction": "NOT_DEFINED",
                "modifiedVulnAvailabilityImpact": "NOT_DEFINED",
                "modifiedVulnConfidentialityImpact": "NOT_DEFINED",
                "modifiedVulnIntegrityImpact": "NOT_DEFINED",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "LOW",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
              "type": "Secondary"
            }
          ],
          "ssvcV203": [
            {
              "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "ssvcData": {
                "id": "CVE-2026-78691",
                "options": [
                  {
                    "exploitation": "poc"
                  },
                  {
                    "automatable": "no"
                  },
                  {
                    "technicalImpact": "partial"
                  }
                ],
                "role": "CISA Coordinator",
                "timestamp": "2026-08-31T14:57:20.454917Z",
                "version": "2.0.3"
              }
            }
          ]
        },
        "published": "2026-08-30T12:17:18.550",
        "references": [
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "url": "https://cna.erlef.org/cves/CVE-2026-78691.html"
          },
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "url": "https://github.com/ash-project/ash_sql/commit/d95c55c64b1b42cc2fd30211a4913f3145156cd4"
          },
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "url": "https://github.com/ash-project/ash_sql/security/advisories/GHSA-5jgp-7mhc-6qqh"
          },
          {
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "url": "https://osv.dev/vulnerability/EEF-CVE-2026-78691"
          },
          {
            "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
            "url": "https://github.com/ash-project/ash_sql/security/advisories/GHSA-5jgp-7mhc-6qqh"
          }
        ],
        "sourceIdentifier": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "vulnStatus": "Deferred",
        "weaknesses": [
          {
            "description": [
              {
                "lang": "en",
                "value": "CWE-943"
              }
            ],
            "source": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "type": "Secondary"
          }
        ]
      }
    },
    "vulnrichment": {
      "containers": {
        "adp": [
          {
            "metrics": [
              {
                "other": {
                  "content": {
                    "id": "CVE-2026-78691",
                    "options": [
                      {
                        "Exploitation": "poc"
                      },
                      {
                        "Automatable": "no"
                      },
                      {
                        "Technical Impact": "partial"
                      }
                    ],
                    "role": "CISA Coordinator",
                    "timestamp": "2026-08-31T14:57:20.454917Z",
                    "version": "2.0.3"
                  },
                  "type": "ssvc"
                }
              }
            ],
            "providerMetadata": {
              "dateUpdated": "2026-08-31T14:57:37.891Z",
              "orgId": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
              "shortName": "CISA-ADP"
            },
            "references": [
              {
                "tags": [
                  "exploit"
                ],
                "url": "https://github.com/ash-project/ash_sql/security/advisories/GHSA-5jgp-7mhc-6qqh"
              }
            ],
            "title": "CISA ADP Vulnrichment"
          }
        ],
        "cna": {
          "affected": [
            {
              "collectionURL": "https://repo.hex.pm",
              "cpes": [
                "cpe:2.3:a:ash-project:ash_sql:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "\u0027Elixir.AshSql.Expr\u0027"
              ],
              "packageName": "ash_sql",
              "packageURL": "pkg:hex/ash_sql",
              "product": "ash_sql",
              "programFiles": [
                "lib/expr.ex"
              ],
              "programRoutines": [
                {
                  "name": "\u0027Elixir.AshSql.Expr\u0027:escape_contains/1"
                },
                {
                  "name": "\u0027Elixir.AshSql.Expr\u0027:escape_starts_with/1"
                },
                {
                  "name": "\u0027Elixir.AshSql.Expr\u0027:escape_ends_with/1"
                }
              ],
              "repo": "https://github.com/ash-project/ash_sql",
              "vendor": "ash-project",
              "versions": [
                {
                  "lessThan": "0.7.1",
                  "status": "affected",
                  "version": "0.1.1-rc.10",
                  "versionType": "semver"
                }
              ]
            },
            {
              "collectionURL": "https://github.com",
              "cpes": [
                "cpe:2.3:a:ash-project:ash_sql:*:*:*:*:*:*:*:*"
              ],
              "defaultStatus": "unaffected",
              "modules": [
                "\u0027Elixir.AshSql.Expr\u0027"
              ],
              "packageName": "ash-project/ash_sql",
              "packageURL": "pkg:github/ash-project/ash_sql",
              "product": "ash_sql",
              "programFiles": [
                "lib/expr.ex"
              ],
              "programRoutines": [
                {
                  "name": "\u0027Elixir.AshSql.Expr\u0027:escape_contains/1"
                },
                {
                  "name": "\u0027Elixir.AshSql.Expr\u0027:escape_starts_with/1"
                },
                {
                  "name": "\u0027Elixir.AshSql.Expr\u0027:escape_ends_with/1"
                }
              ],
              "repo": "https://github.com/ash-project/ash_sql",
              "vendor": "ash-project",
              "versions": [
                {
                  "lessThan": "d95c55c64b1b42cc2fd30211a4913f3145156cd4",
                  "status": "affected",
                  "version": "cfc7da474c5be2190fd62664a83a689377a8d512",
                  "versionType": "git"
                }
              ]
            }
          ],
          "configurations": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eAn application must pass untrusted input as the search term of \u003ccode\u003econtains/2\u003c/code\u003e, \u003ccode\u003estring_starts_with/2\u003c/code\u003e, or \u003ccode\u003estring_ends_with/2\u003c/code\u003e (for example a user-controlled substring search).\u003c/p\u003e"
                },
                {
                  "base64": false,
                  "type": "text/markdown",
                  "value": "An application must pass untrusted input as the search term of `contains/2`, `string_starts_with/2`, or `string_ends_with/2` (for example a user-controlled substring search)."
                }
              ],
              "value": "An application must pass untrusted input as the search term of contains/2, string_starts_with/2, or string_ends_with/2 (for example a user-controlled substring search)."
            }
          ],
          "cpeApplicability": [
            {
              "nodes": [
                {
                  "cpeMatch": [
                    {
                      "criteria": "cpe:2.3:a:ash-project:ash_sql:*:*:*:*:*:*:*:*",
                      "versionEndExcluding": "0.7.1",
                      "versionStartIncluding": "0.1.1-rc.10",
                      "vulnerable": true
                    }
                  ],
                  "negate": false,
                  "operator": "OR"
                }
              ],
              "operator": "AND"
            }
          ],
          "credits": [
            {
              "lang": "en",
              "type": "finder",
              "value": "Peter Ullrich"
            },
            {
              "lang": "en",
              "type": "reporter",
              "value": "Peter Ullrich"
            },
            {
              "lang": "en",
              "type": "remediation developer",
              "value": "Zach Daniel / Ash Project"
            },
            {
              "lang": "en",
              "type": "coordinator",
              "value": "Jonatan M\u00e4nnchen / EEF"
            }
          ],
          "descriptions": [
            {
              "lang": "en",
              "supportingMedia": [
                {
                  "base64": false,
                  "type": "text/html",
                  "value": "\u003cp\u003eImproper Neutralization of Special Elements in Data Query Logic vulnerability in ash-project ash_sql allows a user who supplies a search term to \u003ccode\u003econtains/2\u003c/code\u003e, \u003ccode\u003estring_starts_with/2\u003c/code\u003e, or \u003ccode\u003estring_ends_with/2\u003c/code\u003e to inject live SQL \u003ccode\u003eLIKE\u003c/code\u003e wildcards, turning a literal substring search into an attacker-controlled pattern match.\u003c/p\u003e\n\u003cp\u003eThe escape helpers in \u003ccode\u003eAshSql.Expr\u003c/code\u003e prefix \u003ccode\u003e%\u003c/code\u003e and \u003ccode\u003e_\u003c/code\u003e with a backslash but never escape a backslash already present in the input. Because backslash is the default \u003ccode\u003eLIKE\u003c/code\u003e escape character, the escaping defeats itself: the input \u003ccode\u003e\\%\u003c/code\u003e becomes the pattern fragment \u003ccode\u003e\\\\%\u003c/code\u003e, where \u003ccode\u003e\\\\\u003c/code\u003e is a literal backslash and the attacker\u0027s \u003ccode\u003e%\u003c/code\u003e remains a live wildcard. The search value stays parameterized, so this is confined to the LIKE pattern grammar rather than full SQL. An attacker can widen matches to probe values, slip past a negated \u003ccode\u003econtains(...)\u003c/code\u003e guard, or crash the query with a trailing lone backslash.\u003c/p\u003e\n\u003cp\u003eThis issue affects ash_sql: from 0.1.1-rc.10 before 0.7.1.\u003c/p\u003e"
                },
                {
                  "base64": false,
                  "type": "text/markdown",
                  "value": "Improper Neutralization of Special Elements in Data Query Logic vulnerability in ash-project ash_sql allows a user who supplies a search term to `contains/2`, `string_starts_with/2`, or `string_ends_with/2` to inject live SQL `LIKE` wildcards, turning a literal substring search into an attacker-controlled pattern match.\n\nThe escape helpers in `AshSql.Expr` prefix `%` and `_` with a backslash but never escape a backslash already present in the input. Because backslash is the default `LIKE` escape character, the escaping defeats itself: the input `\\%` becomes the pattern fragment `\\\\%`, where `\\\\` is a literal backslash and the attacker\u0027s `%` remains a live wildcard. The search value stays parameterized, so this is confined to the LIKE pattern grammar rather than full SQL. An attacker can widen matches to probe values, slip past a negated `contains(...)` guard, or crash the query with a trailing lone backslash.\n\nThis issue affects ash_sql: from 0.1.1-rc.10 before 0.7.1."
                }
              ],
              "value": "Improper Neutralization of Special Elements in Data Query Logic vulnerability in ash-project ash_sql allows a user who supplies a search term to contains/2, string_starts_with/2, or string_ends_with/2 to inject live SQL LIKE wildcards, turning a literal substring search into an attacker-controlled pattern match.\n\nThe escape helpers in AshSql.Expr prefix % and _ with a backslash but never escape a backslash already present in the input. Because backslash is the default LIKE escape character, the escaping defeats itself: the input \\% becomes the pattern fragment \\\\%, where \\\\ is a literal backslash and the attacker\u0027s % remains a live wildcard. The search value stays parameterized, so this is confined to the LIKE pattern grammar rather than full SQL. An attacker can widen matches to probe values, slip past a negated contains(...) guard, or crash the query with a trailing lone backslash.\n\nThis issue affects ash_sql: from 0.1.1-rc.10 before 0.7.1."
            }
          ],
          "impacts": [
            {
              "capecId": "CAPEC-116",
              "descriptions": [
                {
                  "lang": "en",
                  "value": "CAPEC-116 Excavation"
                }
              ]
            }
          ],
          "metrics": [
            {
              "cvssV4_0": {
                "Automatable": "NOT_DEFINED",
                "Recovery": "NOT_DEFINED",
                "Safety": "NOT_DEFINED",
                "attackComplexity": "LOW",
                "attackRequirements": "PRESENT",
                "attackVector": "LOCAL",
                "baseScore": 2.1,
                "baseSeverity": "LOW",
                "privilegesRequired": "NONE",
                "providerUrgency": "NOT_DEFINED",
                "subAvailabilityImpact": "NONE",
                "subConfidentialityImpact": "NONE",
                "subIntegrityImpact": "NONE",
                "userInteraction": "NONE",
                "valueDensity": "NOT_DEFINED",
                "vectorString": "CVSS:4.0/AV:L/AC:L/AT:P/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N",
                "version": "4.0",
                "vulnAvailabilityImpact": "NONE",
                "vulnConfidentialityImpact": "LOW",
                "vulnIntegrityImpact": "NONE",
                "vulnerabilityResponseEffort": "NOT_DEFINED"
              },
              "format": "CVSS",
              "scenarios": [
                {
                  "lang": "en",
                  "value": "GENERAL"
                }
              ]
            }
          ],
          "problemTypes": [
            {
              "descriptions": [
                {
                  "cweId": "CWE-943",
                  "description": "CWE-943 Improper Neutralization of Special Elements in Data Query Logic",
                  "lang": "en",
                  "type": "CWE"
                }
              ]
            }
          ],
          "providerMetadata": {
            "dateUpdated": "2026-08-30T11:55:20.331Z",
            "orgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
            "shortName": "EEF"
          },
          "references": [
            {
              "tags": [
                "vendor-advisory",
                "related"
              ],
              "url": "https://github.com/ash-project/ash_sql/security/advisories/GHSA-5jgp-7mhc-6qqh"
            },
            {
              "tags": [
                "related"
              ],
              "url": "https://cna.erlef.org/cves/CVE-2026-78691.html"
            },
            {
              "tags": [
                "related"
              ],
              "url": "https://osv.dev/vulnerability/EEF-CVE-2026-78691"
            },
            {
              "tags": [
                "patch"
              ],
              "url": "https://github.com/ash-project/ash_sql/commit/d95c55c64b1b42cc2fd30211a4913f3145156cd4"
            }
          ],
          "source": {
            "discovery": "EXTERNAL"
          },
          "title": "Unescaped backslash allows LIKE wildcard injection in AshSql string search"
        }
      },
      "cveMetadata": {
        "assignerOrgId": "6b3ad84c-e1a6-4bf7-a703-f496b71e49db",
        "assignerShortName": "EEF",
        "cveId": "CVE-2026-78691",
        "datePublished": "2026-08-30T11:55:20.331Z",
        "dateReserved": "2026-08-30T05:45:01.818Z",
        "dateUpdated": "2026-08-31T14:57:41.423Z",
        "state": "PUBLISHED"
      },
      "dataType": "CVE_RECORD",
      "dataVersion": "5.2"
    }
  }
}



Log in or create an account to share your comment.




Tags
Taxonomy of the tags.


Loading…

Loading…

Loading…

Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.

Sightings

Author Source Type Date Other

Nomenclature

  • Seen: The vulnerability was mentioned, discussed, or observed by the user.
  • Confirmed: The vulnerability has been validated from an analyst's perspective.
  • Published Proof of Concept: A public proof of concept is available for this vulnerability.
  • Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
  • Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
  • Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
  • Not confirmed: The user expressed doubt about the validity of the vulnerability.
  • Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.

Loading…

Loading…

Loading…

Related by attack behaviour

Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.


Loading…