The vulnerability in CVE-2026-78179 isn't really about a developer mishandling a blackboard in a behavior tree — it's about what happens when a utility function designed for one trust context gets reused across contexts with fundamentally different assumptions. The SetValue.js utility in the rexrainbow phaser plugin suite accepts a key parameter and resolves it dynamically against a target object. That pattern works fine when the keys are controlled by game logic, but it becomes dangerous when untrusted input — from a loaded save file, a network message, or serialized game state — reaches the same function.
The specific failure is the classic JavaScript prototype pollution vector: SetValue accepts keys that resolve to 'proto' or 'constructor', allowing an attacker to modify Object.prototype behavior for the entire application. In a game engine context, this isn't just a prototype pollution bug — it's a blast radius problem. The blackboard pattern in behavior trees is hyperconnected to game systems: spawning logic, physics parameters, collision tolerances, UI triggers. Polluting the prototype doesn't require 'arbitrary code execution' to be serious; corrupting a spawn rate, physics constant, or object lifecycle flag is enough to cause game-breaking crashes, save corruption, or desync in networked games.
The fix location matters enormously here. Patching SetValue.js in the BehaviorTree plugin protects only that one library. Patching it in the shared utils folder — which other rexrainbow plugins almost certainly import — protects the entire plugin ecosystem. Using Object.create(null) or Map-based storage prevents the immediate proto vector but doesn't solve the underlying problem: dynamic key resolution against any object still needs validation. The correct fix is key validation at the SetValue layer that rejects 'constructor', 'proto', and 'prototype' regardless of storage backend.
What makes this exploitable depends on the game mode. Single-player games with only local save files represent a lower-risk path (the attacker would need to get the user to load a malicious save). Networked or multiplayer games face genuine risk if server-authoritative state isn't validated before calling SetValue. You should audit whether your game loads untrusted data into any blackboard-adjacent structure — that's the real question, not whether you're running a server.