# How to scan for vulnerabilities with GitHub Security Lab’s open source AI-powered framework

AI taskflows found auth bypasses: Outline group-membership privilege escalation, WooCommerce/Spree guest-order PII leaks, and Rocket.Chat login with any password via unawaited bcrypt Promise.

- Payout: Research
- Severity: high
- Program: Outline
- Found by (vendor credit): Peter Stöckli
- Write-up by: Man Yue Mo
- Disclosed: 2026-03-06
- CVE: CVE-2025-64487, CVE-2025-15033, CVE-2026-25758, CVE-2026-25757, CVE-2026-28514
- Write-up quality: 8/10
- Original: https://github.blog/security/how-to-scan-for-vulnerabilities-with-github-security-labs-open-source-ai-powered-framework/
- Library page: https://bugbountylibrary.com/r/blog%3Agithub-blog-security-how-to-scan-for-vulnerabilities-with-github-security-labs-open-source-ai-powered-framework
- Tags: area:web domain:web impact:ato impact:pii-leak impact:privesc kind:research platform:research sev:high tech:nodejs tech:php vuln:access-control vuln:auth-bypass vuln:idor vuln:privilege-escalation

**Target:** Multi-user web apps: REST document API, ecommerce cart/order endpoints, Meteor DDP account service
**Root cause:** Outline: documents.add_group/remove_group authorize with weaker 'update' instead of 'manageUsers'. Rocket.Chat: validatePassword returns a Promise that is never awaited, so a truthy Promise bypasses the password check. Ecommerce: guest order/address lookups lack ownership checks and use sequential IDs.
**Steps:**
1. Outline: as ReadWrite collaborator, `POST documents.add_group` with `{"id":"<doc>","groupId":"<group>","permission":"admin"}`; 'update' and 'read' checks pass, no manageUsers check, granting Admin via group membership.
2. Rocket.Chat: connect to DDP streamer WebSocket, send login JSON with any password for a user with bcrypt hash set; unawaited Promise makes `valid` truthy, minting a login token.
3. Spree: unauthenticated attacker increments sequential order/address IDs to enumerate guest addresses and phone numbers.
4. WooCommerce: signed-in shop user views all guest orders including names, addresses, phone numbers.
**How found:** Taskflow threat-models repo into components, collects entry points/user actions, suggests likely vuln classes per component, then a fresh-context audit task verifies each suggestion with file/line evidence and realistic attack scenario. LLM excels at access-control logic and control-flow tracing; caught the unawaited-Promise subtlety across multiple files.
**Exploitation:** Outline: low-priv user adds a group they belong to with Admin permission, escalating to manageUsers/archive/delete. Rocket.Chat: any password logs in as any user with a bcrypt hash, then join/listen on arbitrary channels. Spree: unauthenticated enumeration of guest PII by incrementing IDs.
**Escalation:** Outline: group Admin membership unlocks manageUsers, archive, delete, duplicate, move beyond original ReadWrite scope.
**Insight:** LLMs reliably catch authorization-logic mismatches (weaker permission used where stronger required) and missing `await` on async security checks — grep for `validatePassword`/`bcrypt.compare` calls not awaited, and for endpoints authorizing with 'update'/'read' where 'manageUsers'/'admin' is intended.
