mirror of
https://github.com/openclaw/openclaw.git
synced 2026-08-12 21:53:00 -06:00
refactor(qqbot): install plugin from Tencent package (#107295)
* refactor(qqbot): remove bundled extension source Mechanical deletion half of the #107295 squashed rebase; the catalog repoint and host integration land in the follow-up commit. Co-authored-by: sliverp <870080352@qq.com> * refactor(qqbot): install plugin from Tencent package Squashed rebase of #107295 onto current main. Repoints the official external channel catalog at @tencent-connect/openclaw-qqbot@2.0.1 and adapts onboarding, doctor migrations, secrets, build guards, and tests. Documents the known limitation that the external package does not support structured SecretRef clientSecret values; operators move those to QQBOT_CLIENT_SECRET or clientSecretFile before upgrading. Co-authored-by: sliverp <870080352@qq.com> * fix(doctor): reuse shared hasOwnKey record helper The rebased QQBot migration carried its own hasOwnKey export, colliding with the one main now ships in legacy-config-record-shared.ts. Co-authored-by: sliverp <870080352@qq.com> * fix(plugins): carry catalog integrity through the update bridge The externalized-bundled-plugin bridge dropped the official catalog's expectedIntegrity pin, so bundled-user updates installed the external npm package without integrity verification. The bridge now carries the pin for the catalog's exact npm spec and both bridge install calls pass it through; update-channel spec overrides intentionally skip the pin since it only covers the pinned version. Co-authored-by: sliverp <870080352@qq.com> * chore(plugin-sdk): refresh per-entrypoint API baselines The QQBot compat export and bundled-type removal shift 26 entrypoint closure hashes in the new split baseline layout. Co-authored-by: sliverp <870080352@qq.com> * refactor(qqbot): drop helper reintroduced during rebase Main's coercion consolidation added this file after the deletion commit's base; its only consumers were the removed qqbot sources. Co-authored-by: sliverp <870080352@qq.com> --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
This commit is contained in:
@@ -965,34 +965,6 @@ rules:
|
||||
}
|
||||
}
|
||||
heredocLine = "";
|
||||
- id: ghsa-66r7-m7xm-v49h.qqbot-outbound-media-unvalidated-local-path
|
||||
languages:
|
||||
- typescript
|
||||
- javascript
|
||||
severity: ERROR
|
||||
message: QQBot outbound helper resolves local media paths without media-root boundary validation.
|
||||
patterns:
|
||||
- pattern-either:
|
||||
- pattern: |
|
||||
const $MEDIA = resolveQQBotLocalMediaPath(normalizePath(...));
|
||||
- pattern: |
|
||||
const $MEDIA = resolveQQBotLocalMediaPath($PATH);
|
||||
- pattern-inside: |
|
||||
export async function $FN(...){
|
||||
...
|
||||
}
|
||||
- metavariable-regex:
|
||||
metavariable: $FN
|
||||
regex: ^(sendPhoto|sendVoice|sendVideoMsg|sendDocument|sendMedia|sendVoiceMessage)$
|
||||
- pattern-not-inside: |
|
||||
const $RESOLVED = resolveOutboundMediaPath(...);
|
||||
...
|
||||
metadata:
|
||||
ghsa: GHSA-66R7-M7XM-V49H
|
||||
advisory-url: https://github.com/openclaw/openclaw/security/advisories/GHSA-66R7-M7XM-V49H
|
||||
detector-bucket: precise
|
||||
source-run: 2026-04-17T07-37-10Z
|
||||
source-rule-id: qqbot-outbound-media-unvalidated-local-path
|
||||
- id: ghsa-6g25-pc82-vfwp.oauth-state-reuses-pkce-verifier
|
||||
languages:
|
||||
- typescript
|
||||
@@ -1617,46 +1589,6 @@ rules:
|
||||
detector-bucket: precise
|
||||
source-run: 2026-04-17T07-37-10Z
|
||||
source-rule-id: openclaw-skill-env-host-injection
|
||||
- id: ghsa-846p-hgpv-vphc.qqbot-outbound-local-read-without-boundary-check
|
||||
message: QQ Bot outbound local media handling reads a user-influenced path after resolveQQBotLocalMediaPath() without resolveOutboundMediaPath()/resolveQQBotPayloadLocalFilePath() boundary enforcement.
|
||||
severity: ERROR
|
||||
languages:
|
||||
- typescript
|
||||
- javascript
|
||||
patterns:
|
||||
- pattern-either:
|
||||
- pattern: |
|
||||
$MP = resolveQQBotLocalMediaPath(normalizePath($RAW));
|
||||
...
|
||||
readFileAsync($MP)
|
||||
- pattern: |
|
||||
$MP = resolveQQBotLocalMediaPath(normalizePath($RAW));
|
||||
...
|
||||
audioFileToSilkBase64($MP, ...)
|
||||
- pattern: |
|
||||
$MP = resolveQQBotLocalMediaPath(normalizePath($RAW));
|
||||
...
|
||||
checkFileSize($MP)
|
||||
- pattern-not: |
|
||||
$RES = resolveOutboundMediaPath($RAW, ..., ...)
|
||||
...
|
||||
- pattern-not: |
|
||||
$SAFE = resolveQQBotPayloadLocalFilePath($MP)
|
||||
...
|
||||
- pattern-not: |
|
||||
if (!resolveQQBotPayloadLocalFilePath($MP)) {
|
||||
...
|
||||
}
|
||||
metadata:
|
||||
category: security
|
||||
technology:
|
||||
- qqbot
|
||||
confidence: medium
|
||||
ghsa: GHSA-846P-HGPV-VPHC
|
||||
advisory-url: https://github.com/openclaw/openclaw/security/advisories/GHSA-846P-HGPV-VPHC
|
||||
detector-bucket: precise
|
||||
source-run: 2026-04-17T07-37-10Z
|
||||
source-rule-id: qqbot-outbound-local-read-without-boundary-check
|
||||
- id: ghsa-8689-gm9g-jgr6.plivo-v3-replay-key-uses-unsorted-url
|
||||
languages:
|
||||
- typescript
|
||||
|
||||
Reference in New Issue
Block a user