The vulnerability, identified as GHSA-8mh7-phf8-xgfm, allowed for the disclosure of sensitive configuration secrets to clients with limited operator.read permissions. The root cause was in the skills.status gateway method, which returned a detailed report on skill requirements.
The analysis of the provided patches reveals that the core of the issue lay within the buildConfigChecks function in src/shared/requirements.ts. This function was designed to check if configuration requirements were met, but it also resolved and returned the actual values of the configuration paths. This included potentially sensitive data, such as the Discord bot token mentioned in the advisory.
The call chain leading to the vulnerability started at the skills.status endpoint, which is handled by functions like buildSkillStatus. This function would call evaluateRequirementsFromMetadata, which in turn called evaluateRequirements, and finally buildConfigChecks. Along this chain, a function to resolve the configuration value (resolveConfigValue) was passed down, leading to the inclusion of the secret value in the final output.
The fix, implemented in commit d3428053d95eefbe10ecf04f92218ffcba55ae5a, involved removing the logic that resolved and returned the configuration values. Specifically, the value field was removed from the RequirementConfigCheck type, and the resolveValue parameter was removed from buildConfigChecks and its callers (evaluateRequirements, evaluateRequirementsFromMetadata, buildSkillStatus, and buildHookStatus).
A similar vulnerability was proactively fixed in buildHookStatus, which could have exposed secrets related to hooks.
By identifying these functions, runtime security tools can now monitor for calls to these vulnerable functions (in their unpatched versions) to detect potential exploitation attempts.