{"id":"CVE-2026-48593","aliases":["EEF-CVE-2026-48593","EUVD-2026-31974","GHSA-6xh2-93p9-vqh4"],"status":"published","title":"Unbounded range expansion in cron describe causes memory exhaustion in oban_web","description":"Uncontrolled Resource Consumption vulnerability in oban-bg oban_web ('Elixir.Oban.Web.CronExpr' modules) allows memory exhaustion via unbounded cron range expansion.\n\nAn attacker with access to schedule cron jobs can submit a malicious cron expression such as \"0 0 1-100000000 * *\". When a user with dashboard access views the cron job list, 'Elixir.Oban.Web.CronExpr':describe/1 is called to render the expression. parse_range/1 parses both range endpoints via Integer.parse/1 with no bounds check, and the downstream helpers expand_dom_parts/1 and expand_dow_parts/1 materialise the range eagerly via Enum.to_list/1, causing allocation of ~2.4 GB and stalling or crashing the BEAM node. A sibling helper extract_dom_values already validates range bounds, but the expansion helpers do not.\n\nThis issue affects oban_web: from 2.12.0 before 2.12.5.","severity":{"version":"4.0","score":5.9,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","level":"medium","assessor":"cna","from":"cve"},"epss":{"day":"2026-11-09","score":0.00417,"percentile":0.36277,"model":"v2026.06.15"},"facts":{"in_kev":false,"known_exploited":false,"public_exploit":false,"fix_available":true},"cwes":["CWE-400"],"published":"2026-05-26T19:46:43Z","modified":"2026-10-28T02:30:34Z","fixes":[{"ecosystem":"Hex","package":"oban_web","fixed_in":["2.12.5"],"sources":["ghsa","osv"]}],"affected":[{"source":"ghsa","ecosystem":"Hex","package":"oban_web","ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"2.12.0"},{"fixed":"2.12.5"}]}]},{"source":"osv","ecosystem":"Hex","package":"oban_web","ranges":[{"type":"SEMVER","events":[{"introduced":"2.12.0"},{"fixed":"2.12.5"}]}],"versions":["2.12.0","2.12.1","2.12.2","2.12.3","2.12.4"]},{"source":"osv","ecosystem":"Hex","package":"oban_web","ranges":[{"type":"SEMVER","events":[{"introduced":"2.12.0"},{"fixed":"2.12.5"}]}],"versions":["2.12.0","2.12.1","2.12.2","2.12.3","2.12.4"]}],"products":[{"vendor":"oban-bg","product":"oban_web"}],"references":[{"url":"https://github.com/oban-bg/oban_web/security/advisories/GHSA-6xh2-93p9-vqh4","tags":["vendor-advisory","related","advisory","web"]},{"url":"https://cna.erlef.org/cves/CVE-2026-48593.html","tags":["related","web"]},{"url":"https://osv.dev/vulnerability/EEF-CVE-2026-48593","tags":["related","web"]},{"url":"https://github.com/oban-bg/oban_web/commit/9998b7e284e02fdd4645dd6231760038e63b584d","tags":["patch","fix","web"]},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2026-48593","tags":["advisory"]},{"url":"https://github.com/oban-bg/oban_web/commit/a97c7960bb389b05aaab4cf8042985f02ceddc24","tags":["web"]},{"url":"https://github.com/advisories/GHSA-6xh2-93p9-vqh4"},{"url":"https://github.com","tags":["web"]},{"url":"https://repo.hex.pm","tags":["web"]},{"url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/48xxx/CVE-2026-48593.json","tags":["advisory"]},{"url":"https://github.com/oban-bg/oban_web.git","tags":["package"]},{"url":"https://hex.pm/packages/oban_web","tags":["package"]},{"url":"https://github.com/oban-bg/oban_web","tags":["package"]}],"sources":{"cve":[{"id":"CVE-2026-48593","title":"Unbounded range expansion in cron describe causes memory exhaustion in oban_web","description":"Uncontrolled Resource Consumption vulnerability in oban-bg oban_web ('Elixir.Oban.Web.CronExpr' modules) allows memory exhaustion via unbounded cron range expansion.\n\nAn attacker with access to schedule cron jobs can submit a malicious cron expression such as \"0 0 1-100000000 * *\". When a user with dashboard access views the cron job list, 'Elixir.Oban.Web.CronExpr':describe/1 is called to render the expression. parse_range/1 parses both range endpoints via Integer.parse/1 with no bounds check, and the downstream helpers expand_dom_parts/1 and expand_dow_parts/1 materialise the range eagerly via Enum.to_list/1, causing allocation of ~2.4 GB and stalling or crashing the BEAM node. A sibling helper extract_dom_values already validates range bounds, but the expansion helpers do not.\n\nThis issue affects oban_web: from 2.12.0 before 2.12.5.","status":"published","published":"2026-05-26T19:46:43.98Z","modified":"2026-05-27T15:40:57.317Z","cvss":[{"version":"4.0","score":5.9,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","level":"medium","assessor":"cna"}],"cwes":["CWE-400"],"updated_at":"2026-11-02T13:50:49.872037Z"}],"euvd":[{"id":"EUVD-2026-31974","description":"Uncontrolled Resource Consumption vulnerability in oban-bg oban_web ('Elixir.Oban.Web.CronExpr' modules) allows memory exhaustion via unbounded cron range expansion.\n\nAn attacker with access to schedule cron jobs can submit a malicious cron expression such as \"0 0 1-100000000 * *\". When a user with dashboard access views the cron job list, 'Elixir.Oban.Web.CronExpr':describe/1 is called to render the expression. parse_range/1 parses both range endpoints via Integer.parse/1 with no bounds check, and the downstream helpers expand_dom_parts/1 and expand_dow_parts/1 materialise the range eagerly via Enum.to_list/1, causing allocation of ~2.4 GB and stalling or crashing the BEAM node. A sibling helper extract_dom_values already validates range bounds, but the expansion helpers do not.\n\nThis issue affects oban_web: from 2.12.0 before 2.12.5.","status":"published","published":"2026-05-26T19:46:43Z","modified":"2026-05-27T15:40:57Z","cvss":[{"version":"4.0","score":5.9,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","level":"medium"}],"updated_at":"2026-11-02T18:21:03.926243Z"}],"ghsa":[{"id":"GHSA-6xh2-93p9-vqh4","title":"oban_web: Unbounded range expansion in cron describe causes memory exhaustion","description":"### Summary\n\n`oban_web` 2.12.0 introduced a cron expression parser that expands `-`-separated ranges without validating the endpoints. An attacker with access to schedule cron jobs can submit a malicious expression; when any user with dashboard access views the cron job list, `Oban.Web.CronExpr.describe/1` is called to render it, triggering allocation of gigabytes of memory and stalling or crashing the BEAM node.\n\n### Details\n\n**1. Scheduling:** The attacker submits a cron job with a malicious expression such as `\"0 0 1-100000000 * *\"`. No special privilege is required beyond the ability to schedule cron jobs.\n\n**2. Parsing:** When the cron list is rendered in the dashboard, `describe/1` calls `parse_range/1` in `lib/oban/web/cron_expr.ex`, which calls `Integer.parse/1` on both endpoints of the range with no bounds check, returning `{:range, start_val, end_val}` for any integers.\n\n**3. Eager expansion:** `expand_dom_parts/1` and `expand_dow_parts/1` materialise the range via `Enum.to_list(start_val..end_val)`. The input above produces ~100 million integers (~2.4 GB). A sibling helper `extract_dom_values` already validates range bounds, but the expansion helpers do not.\n\n### PoC\n\n1. Schedule a cron job with expression `\"0 0 1-100000000 * *\"` (or any expression with an out-of-domain range).\n2. Have any user with Oban.Web dashboard access navigate to the cron job list.\n3. The dashboard calls `describe/1` to render the expression, exhausting BEAM memory and crashing the node.\n\n### Impact\n\nCVSS 4.0 score 5.9 (Medium). Affects `oban_web` \u003e= 2.12.0. Requires the ability to schedule a cron job and a dashboard user to view the cron list; no further privileges are needed.\n\n### References\n\n* Introduction commit: https://github.com/oban-bg/oban_web/commit/a97c7960bb389b05aaab4cf8042985f02ceddc24\n* Patch commit: https://github.com/oban-bg/oban_web/commit/9998b7e284e02fdd4645dd6231760038e63b584d","status":"published","published":"2026-06-30T18:32:49Z","modified":"2026-06-30T18:32:50Z","cvss":[{"version":"4.0","score":5.9,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","level":"medium"}],"cwes":["CWE-400"],"updated_at":"2026-11-02T14:40:35.701766Z"}],"nvd":[{"id":"CVE-2026-48593","description":"Uncontrolled Resource Consumption vulnerability in oban-bg oban_web ('Elixir.Oban.Web.CronExpr' modules) allows memory exhaustion via unbounded cron range expansion.\n\nAn attacker with access to schedule cron jobs can submit a malicious cron expression such as \"0 0 1-100000000 * *\". When a user with dashboard access views the cron job list, 'Elixir.Oban.Web.CronExpr':describe/1 is called to render the expression. parse_range/1 parses both range endpoints via Integer.parse/1 with no bounds check, and the downstream helpers expand_dom_parts/1 and expand_dow_parts/1 materialise the range eagerly via Enum.to_list/1, causing allocation of ~2.4 GB and stalling or crashing the BEAM node. A sibling helper extract_dom_values already validates range bounds, but the expansion helpers do not.\n\nThis issue affects oban_web: from 2.12.0 before 2.12.5.","status":"published","published":"2026-05-26T21:16:41.857Z","modified":"2026-07-24T11:10:00.17Z","cvss":[{"version":"4.0","score":5.9,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:P/VC:N/VI:N/VA:H/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","level":"medium","assessor":"secondary"}],"cwes":["CWE-400"],"updated_at":"2026-11-02T14:12:20.511562Z"}],"osv":[{"id":"CVE-2026-48593","title":"Unbounded range expansion in cron describe causes memory exhaustion in oban_web","description":"Uncontrolled Resource Consumption vulnerability in oban-bg oban_web ('Elixir.Oban.Web.CronExpr' modules) allows memory exhaustion via unbounded cron range expansion.\n\nAn attacker with access to schedule cron jobs can submit a malicious cron expression such as \"0 0 1-100000000 * *\". When a user with dashboard access views the cron job list, 'Elixir.Oban.Web.CronExpr':describe/1 is called to render the expression. parse_range/1 parses both range endpoints via Integer.parse/1 with no bounds check, and the downstream helpers expand_dom_parts/1 and expand_dow_parts/1 materialise the range eagerly via Enum.to_list/1, causing allocation of ~2.4 GB and stalling or crashing the BEAM node. A sibling helper extract_dom_values already validates range bounds, but the expansion helpers do not.\n\nThis issue affects oban_web: from 2.12.0 before 2.12.5.","status":"published","published":"2026-05-26T19:46:43.98Z","modified":"2026-10-28T02:30:34.706733675Z","cvss":[{"version":"4.0","score":5.9,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","level":"medium"}],"cwes":["CWE-400"],"updated_at":"2026-11-02T15:45:06.701612Z"},{"id":"EEF-CVE-2026-48593","title":"Unbounded range expansion in cron describe causes memory exhaustion in oban_web","description":"## Summary\n\nUncontrolled Resource Consumption vulnerability in oban-bg oban\\_web ('Elixir.Oban.Web.CronExpr' modules) allows memory exhaustion via unbounded cron range expansion.\n\nAn attacker with access to schedule cron jobs can submit a malicious cron expression such as \"0 0 1-100000000 \\* \\*\". When a user with dashboard access views the cron job list, 'Elixir.Oban.Web.CronExpr':describe/1 is called to render the expression. parse\\_range/1 parses both range endpoints via Integer.parse/1 with no bounds check, and the downstream helpers expand\\_dom\\_parts/1 and expand\\_dow\\_parts/1 materialise the range eagerly via Enum.to\\_list/1, causing allocation of ~2.4 GB and stalling or crashing the BEAM node. A sibling helper extract\\_dom\\_values already validates range bounds, but the expansion helpers do not.\n\nThis issue affects oban\\_web: from 2.12.0 before 2.12.5.\n\n## Configurations\n\nThe vulnerability is exploitable when an attacker with access to schedule cron jobs submits a malicious cron expression. The crash is triggered when a user with dashboard access views the cron job list, which calls 'Elixir.Oban.Web.CronExpr':describe/1 to render the expression.","status":"published","published":"2026-05-26T19:46:43.98Z","modified":"2026-09-08T03:45:04.517981795Z","cvss":[{"version":"4.0","score":5.9,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","level":"medium"}],"cwes":["CWE-400"],"updated_at":"2026-11-02T15:46:33.047032Z"},{"id":"GHSA-6xh2-93p9-vqh4","title":"oban_web: Unbounded range expansion in cron describe causes memory exhaustion","description":"### Summary\n\n`oban_web` 2.12.0 introduced a cron expression parser that expands `-`-separated ranges without validating the endpoints. An attacker with access to schedule cron jobs can submit a malicious expression; when any user with dashboard access views the cron job list, `Oban.Web.CronExpr.describe/1` is called to render it, triggering allocation of gigabytes of memory and stalling or crashing the BEAM node.\n\n### Details\n\n**1. Scheduling:** The attacker submits a cron job with a malicious expression such as `\"0 0 1-100000000 * *\"`. No special privilege is required beyond the ability to schedule cron jobs.\n\n**2. Parsing:** When the cron list is rendered in the dashboard, `describe/1` calls `parse_range/1` in `lib/oban/web/cron_expr.ex`, which calls `Integer.parse/1` on both endpoints of the range with no bounds check, returning `{:range, start_val, end_val}` for any integers.\n\n**3. Eager expansion:** `expand_dom_parts/1` and `expand_dow_parts/1` materialise the range via `Enum.to_list(start_val..end_val)`. The input above produces ~100 million integers (~2.4 GB). A sibling helper `extract_dom_values` already validates range bounds, but the expansion helpers do not.\n\n### PoC\n\n1. Schedule a cron job with expression `\"0 0 1-100000000 * *\"` (or any expression with an out-of-domain range).\n2. Have any user with Oban.Web dashboard access navigate to the cron job list.\n3. The dashboard calls `describe/1` to render the expression, exhausting BEAM memory and crashing the node.\n\n### Impact\n\nCVSS 4.0 score 5.9 (Medium). Affects `oban_web` \u003e= 2.12.0. Requires the ability to schedule a cron job and a dashboard user to view the cron list; no further privileges are needed.\n\n### References\n\n* Introduction commit: https://github.com/oban-bg/oban_web/commit/a97c7960bb389b05aaab4cf8042985f02ceddc24\n* Patch commit: https://github.com/oban-bg/oban_web/commit/9998b7e284e02fdd4645dd6231760038e63b584d","status":"published","published":"2026-06-30T18:32:49Z","modified":"2026-06-30T18:45:32.15710333Z","cvss":[{"version":"4.0","score":5.9,"vector":"CVSS:4.0/AV:N/AC:L/AT:P/PR:L/UI:P/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N","level":"medium"}],"cwes":["CWE-400"],"updated_at":"2026-11-02T15:46:40.308826Z"}]}}
