うつろい EC は GraphQL API を採用。本番環境で Introspection が無効化されていない。攻撃者は __schema クエリで全 API スキーマを取得できる。
スキーマには「フロントエンドからは呼ばれていないが定義されている管理者用 mutation」がいくつか含まれている。これらが認可チェック不備で誰でも呼べる状態。
うつろい EC は GraphQL API を採用。本番環境で Introspection が無効化されていない。攻撃者は __schema クエリで全 API スキーマを取得できる。
スキーマには「フロントエンドからは呼ばれていないが定義されている管理者用 mutation」がいくつか含まれている。これらが認可チェック不備で誰でも呼べる状態。
① Introspection でスキーマ全体を取得 → ② 隠された管理用 mutation を発見 → ③ それを呼び出して機密情報を取得してください。
// 危険:本番でも introspection 有効
const server = new ApolloServer({
typeDefs, resolvers,
// introspection オプション未設定 = デフォルト true
});
// 各 mutation の resolver でも認可チェック漏れ
const resolvers = {
Mutation: {
exportCustomerData(parent, args, context) {
// ★ context.user.role の確認なし
return CustomerService.exportAll(args.format);
}
}
};
exportCustomerData、resetUserPassword、deleteAllUsers 等の管理用 mutation の存在が判明これは「機能を隠したつもりが Introspection で全部見える」+「resolver で認可チェック忘れ」のダブルミス。実際の事案でも頻出します。