|
| 1 | +--- |
| 2 | +gem: kobako |
| 3 | +cve: 2026-55107 |
| 4 | +ghsa: 7pwq-q9jf-539h |
| 5 | +url: https://github.com/elct9620/kobako/security/advisories/GHSA-7pwq-q9jf-539h |
| 6 | +title: kobako Sandbox Escape - guest eval reaches host RCE via |
| 7 | + method_missing → public_send (any bound Service) |
| 8 | +date: 2026-08-18 |
| 9 | +description: | |
| 10 | + ### Summary |
| 11 | +
|
| 12 | + A guest mruby script running inside the Kobako sandbox can execute |
| 13 | + arbitrary Ruby in the host process, fully escaping the sandbox. |
| 14 | +
|
| 15 | + ### Impact |
| 16 | +
|
| 17 | + Complete sandbox escape leading to remote code execution in the host process, |
| 18 | + defeating the gem's central guarantee of isolating untrusted mruby scripts. |
| 19 | + Any deployment that runs untrusted or attacker-influenced scripts is affected. |
| 20 | + All released versions (0.1.0 through 0.9.0) are vulnerable; the dispatcher |
| 21 | + carried the same unguarded `public_send` sink under three successive names |
| 22 | + (`registry` → `rpc` → `transport`). |
| 23 | +
|
| 24 | + ### Credits |
| 25 | +
|
| 26 | + Reported and fixed by Ahmed Al Hafoudh. |
| 27 | +cvss_v3: 10.0 |
| 28 | +patched_versions: |
| 29 | + - ">= 0.9.1" |
| 30 | +related: |
| 31 | + url: |
| 32 | + - https://rubygems.org/gems/kobako/versions/0.9.1 |
| 33 | + - https://github.com/elct9620/kobako/blob/main/CHANGELOG.md#091-2026-06-11 |
| 34 | + - https://github.com/elct9620/kobako/commit/dd081665f368f7ba54e476c3ad045ee1aa8ed703 |
| 35 | + - https://github.com/elct9620/kobako/commit/64f84700c81f44902bed9211318d5362f44987b3 |
| 36 | + - https://advisories.gitlab.com/gem/kobako/CVE-2026-55107 |
| 37 | + - https://github.com/elct9620/kobako/security/advisories/GHSA-7pwq-q9jf-539h |
| 38 | + - https://github.com/advisories/GHSA-7pwq-q9jf-539h |
| 39 | +notes: | |
| 40 | + - cvss_v3 from GHSA |
| 41 | + - CVE is reserved, but not published. |
| 42 | + - Details on Patch: |
| 43 | + - Fixed in 0.9.1. The dispatcher now rejects any method whose resolved |
| 44 | + owner is a core/meta module (`BasicObject`, `Kernel`, `Object`, |
| 45 | + `Module`, `Class`), so only methods the bound object itself defines — |
| 46 | + or dynamically handles via `method_missing` — remain reachable. |
| 47 | + The ambient reflection methods (`send`, `__send__`, `public_send`, |
| 48 | + `instance_eval`, `instance_exec`, `method`, `instance_variable_get`, |
| 49 | + …) are all owned by those modules and are blocked. |
0 commit comments