TaxPinTaxPin

セキュリティ検証

安全に作るだけでなく、 攻撃者のように検証しました

TaxPinのセキュリティは「作りました」で終わりません。攻撃者の視点から繰り返し突破を試み、さらに外部の専門機関による独立したレビューを受けました。

テナント分離権限昇格MFA回避招待の乗っ取り登録の悪用XSS · 秘密情報攻撃対象領域

2つの層で検証

自らを攻撃する内部レビューと、独立した外部評価を組み合わせています。

🧪

内部の攻撃者視点レビュー

独立したチームが複数回にわたり実際の攻撃シナリオでコードを検証し、発見事項をデータベース層とサーバー層で構造的に解消しました。

🛰️

外部レビュー — AEGISonar

WebEASMのAEGISonarによる、攻撃対象領域とウェブ脆弱性の独立した外部評価です。

内部の攻撃者視点レビュー — 実施方法

「丁寧にコーディングした」ではなく、実際に侵入を試みました。異なる手法を用いる独立したチームが複数回にわたり並行してコードを検証し、各発見事項は到達可能性を独立して反証する試みを経た後にのみ確定されました。

手法

多角的なチームRLSと認可(テナント分離)、サーバーロジック(STRIDE)、クライアントとウェブ(OWASP)、データ/ストレージの回帰 — 4つの角度から異なる視点で同時にレビューしました。
繰り返しのラウンド一度きりではなく、レビュー → 修正 → 再レビューを複数回実施しました。新機能(セルフ登録・請求・無料トライアル)が加わるたびに再度レビューしました。
敵対的な検証各発見事項は複数のレビュアーが独立して異議を唱えたため、実際に到達可能な問題だけが確定され、誇張されたものは除外されました。
構造的な修正応急処置ではなく、行レベルセキュリティ(RLS)・トリガー・サーバー側のゲートという構造的な層で発見事項を解消し、レビューと修正の履歴を管理しています。

テストした攻撃シナリオ

以下の攻撃を実際に試み、データベースとサーバーコードのレベルで遮断されることを確認しました。

✓テナント分離の回避

他の事務所のお客様・書類・依頼の読み書きを試みました。読み取りだけでなく、書き込み(INSERT/UPDATE)も事務所↔お客様の関係に紐づけられ、遮断されます。

✓垂直方向の権限昇格

スタッフ→オーナー、お客様→事務所メンバーへの昇格を試みました。ロールの判定と招待の受諾はサーバーとデータベースで強制されます。

✓招待リンクの乗っ取り

メールアドレスが一致しない状態での招待受諾を試みました。ログインのメールアドレスは招待されたメールアドレスと一致する必要があります。

✓MFAの回避

パスワードだけでデータに到達することを試みました。要素を登録した時点で、データベースはaal2(2要素)セッションを要求します。

✓通知・メール中継の悪用とフィッシングの注入

通知経路を通じて偽のログインリンクを注入することを試みました。送信者の識別情報とリンクのドメインは信頼された値に固定されています。

✓登録フローの悪用

サービスを停止させたり事務所アドレスを占有したりするための、登録APIへの匿名の大量呼び出し。サーバールーティング・レート制限・決済セッションの紐づけで遮断されます。

✓秘密情報の露出、XSS、オープンリダイレクト

サーバーの秘密情報がブラウザに漏れないか、ユーザー入力がスクリプトとして実行されないか、リダイレクトが悪用されないかを確認しました。

✓受信SMSウェブフックの偽造

SMS同意を切り替えるための受信ウェブフックの偽造を試みました。必須の署名検証により遮断されます。

確定した実際の問題は、ほとんどが実際のお客様を迎える前に、データベースポリシーとサーバーコードのレベルで解消されました。

正直な境界線

セキュリティは「完了」のない継続的なプロセスです。内部レビューは静的解析とシナリオに基づき、外部のAEGISonar評価で補完しています。お客様が増えるにつれ、テストの範囲を広げ続けています。完璧を主張するのではなく、何をどのように検証したかを透明に示すことを選びます。

外部レビュー — WebEASM AEGISonar

内部レビューだけでは死角が残る可能性があるため、独立した外部評価を受けました。WebEASMのAEGISonarが、外部に露出した攻撃対象領域とウェブ脆弱性を独立して調査しました。

5

外部監査結果 · 総合評価 5(Safe)

Critical/High/Mediumの発見事項0件、SSL/TLSは安全、外部リンクの脅威0件 — 結果の全文を見る

→