{"id":"CVE-2026-105106","revision":null,"records":[{"revision":"2df254ffa1cd4885a2cb58744277154b","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2026-105106","aliases":[],"title":"Koha authenticated OS command injection in tools/scheduler.pl via the jobid parameter when deleting a scheduled task","description":"Koha is vulnerable to OS command injection in the Task Scheduler deletion path. The tools/scheduler.pl handler accepts the jobid request parameter for op=cud-delete and passes it to C4::Scheduler::remove_at_job without validating it. Schedule::At::remove substitutes the supplied job ID into an atrm command string without quoting or escaping it and executes the command through a single-argument system() call, which invokes the shell. An authenticated staff user with the tools => schedule_tasks permission can therefore execute arbitrary operating-system commands as the Koha web/application user by supplying shell metacharacters in jobid. The issue is fixed in Koha 24.11.20, 25.05.15, 25.11.09, and 26.05.04, and in the 26.11 development branch.","state":0,"publishedAt":"2026-10-14T07:23:03.069+00:00","modifiedAt":"2026-10-14T17:56:36.316+00:00","affected":[{"ecosystem":"Vendor product","name":"Koha","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"vendor\": \"Koha Community\",\n                    \"product\": \"Koha\",\n                    \"versions\": [\n                        {\n                            \"status\": \"affected\",\n                            \"version\": \"0\",\n                            \"lessThan\": \"24.11.00\",\n                            \"versionType\": \"custom\"\n                        },\n                        {\n                            \"status\": \"affected\",\n                            \"version\": \"24.11.00\",\n                            \"lessThan\": \"24.11.20\",\n                            \"versionType\": \"custom\"\n                        },\n                        {\n                            \"status\": \"affected\",\n                            \"version\": \"25.05.00\",\n                            \"lessThan\": \"25.05.15\",\n                            \"versionType\": \"custom\"\n                        },\n                        {\n                            \"status\": \"affected\",\n                            \"version\": \"25.11.00\",\n                            \"lessThan\": \"25.11.09\",\n                            \"versionType\": \"custom\"\n                        },\n                        {\n                            \"status\": \"affected\",\n                            \"version\": \"26.05.00\",\n                            \"lessThan\": \"26.05.04\",\n                            \"versionType\": \"custom\"\n                        }\n                    ],\n                    \"defaultStatus\": \"unaffected\"\n                }"}],"metrics":[{"system":"CVSS 3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","score":8.8,"severity":"HIGH"}],"references":["https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=42674","https://download.koha-community.org/","https://www.cve.org/CVERecord?id=CVE-2025-30076","https://www.cve.org/CVERecord?id=CVE-2024-28739"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-105106","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-105106","identifiers":["CVE-2026-105106"]},"retained":false,"historicalAffected":[]}],"coverage":[{"source":"cisa-kev:global","scope":"Complete CISA KEV catalog; all vendors. Missing entries do not establish absence of exploitation.","generation":"2026-11-10T02:02:16.7426948+00:00","complete":true,"records":1773,"lastAttemptAt":"2026-11-10T02:02:16.7426948+00:00","lastSuccessAt":"2026-11-10T02:02:16.8834841+00:00","error":null,"lastVerifiedAt":"2026-11-10T02:02:16.8834842+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-8859cf40d4337e24bd2f258cc7778fbad01bb24c79d057aaf34cf1dfc6f8917d-3682c03b9a65aeeb7a6398250677204fe1fddf168002894b8519e9831c9838b3","complete":true,"records":421860,"lastAttemptAt":"2026-11-10T02:02:16.0380672+00:00","lastSuccessAt":"2026-11-10T02:02:15.9983406+00:00","error":null,"lastVerifiedAt":"2026-11-10T02:02:16.0380672+00:00","snapshotPublishedAt":"2026-11-10T01:19:15+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"euvd","scope":"Rolling EUVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global EUVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-3186fa1fafe74964b6e1aa139c78003e","complete":false,"records":13689,"lastAttemptAt":"2026-11-10T02:12:17.1701512+00:00","lastSuccessAt":"2026-11-10T02:12:17.4689294+00:00","error":null,"lastVerifiedAt":"2026-11-10T02:12:17.4689294+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-11-10T02:02:16.7426948+00:00","complete":true,"records":1096,"lastAttemptAt":"2026-11-10T02:02:16.7426948+00:00","lastSuccessAt":"2026-11-10T02:02:16.8841913+00:00","error":null,"lastVerifiedAt":"2026-11-10T02:02:16.8841914+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"nvd","scope":"Rolling NVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global NVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-af04f5d48dbb47d2bc2540f8606c2614","complete":false,"records":13695,"lastAttemptAt":"2026-11-10T02:02:42.0606224+00:00","lastSuccessAt":"2026-11-10T02:02:42.058+00:00","error":null,"lastVerifiedAt":"2026-11-10T02:02:42.058+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13704,"expectedIdentifiers":13742,"failedIdentifiers":0},{"source":"osv:Go","scope":"Complete OSV Go ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"go-cdffb4589856378aa42e8d1bd4a6c74e27a180d8160bf764c44715ef760f0a62","complete":true,"records":9932,"lastAttemptAt":"2026-11-10T02:02:16.6874003+00:00","lastSuccessAt":"2026-11-10T00:04:19.8260565+00:00","error":null,"lastVerifiedAt":"2026-11-10T02:02:16.6874003+00:00","snapshotPublishedAt":"2026-11-09T23:48:01+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-26503967ae4379db8f374089589d6e03fb15bd31f820c9e992aaf93840c2236c","complete":true,"records":1971,"lastAttemptAt":"2026-11-10T02:02:16.1998498+00:00","lastSuccessAt":"2026-11-09T21:02:20.472473+00:00","error":null,"lastVerifiedAt":"2026-11-10T02:02:16.1998498+00:00","snapshotPublishedAt":"2026-11-09T20:18:18+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:crates.io","scope":"Complete OSV crates.io ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"crates.io-761ecc9061239b0da572dc9254c6f384c1d19339eb08408c436647a2f26129e9","complete":true,"records":3064,"lastAttemptAt":"2026-11-10T02:02:16.7001987+00:00","lastSuccessAt":"2026-11-09T17:05:03.4044794+00:00","error":null,"lastVerifiedAt":"2026-11-10T02:02:16.7001987+00:00","snapshotPublishedAt":"2026-11-09T16:33:20+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:npm","scope":"Complete OSV npm ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"npm-de491e92084daab7829a905b7af7daf62c5cba9f53efe3052c21cec43e90d59a","complete":true,"records":231581,"lastAttemptAt":"2026-11-10T02:02:16.5833779+00:00","lastSuccessAt":"2026-11-10T01:13:21.102106+00:00","error":null,"lastVerifiedAt":"2026-11-10T02:02:16.5833779+00:00","snapshotPublishedAt":"2026-11-10T00:48:12+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}