@prefix schema: <https://schema.org/> .
@prefix skos: <http://www.w3.org/2004/02/skos/core#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix ks: <https://comcomponent.com/vocab/> .

<https://comcomponent.com/blog/sc-exam-r6s-pm-q1-api-security/#article>
    schema:about <https://comcomponent.com/knowledge/rest-api/>, <https://comcomponent.com/knowledge/jwt/>, <https://comcomponent.com/knowledge/authorization/>, <https://comcomponent.com/knowledge/waf/> ;
    schema:mentions <https://comcomponent.com/knowledge/authentication/>, <https://comcomponent.com/knowledge/bola/>, <https://comcomponent.com/knowledge/mass-assignment/>, <https://comcomponent.com/knowledge/four-digit-auth-code/>, <https://comcomponent.com/knowledge/brute-force/>, <https://comcomponent.com/knowledge/account-lockout/>, <https://comcomponent.com/knowledge/log4shell/>, <https://comcomponent.com/knowledge/jndi-lookup/>, <https://comcomponent.com/knowledge/arbitrary-code-execution/>, <https://comcomponent.com/knowledge/library-update/> .

<https://comcomponent.com/knowledge/rest-api/> a skos:Concept ;
    skos:prefLabel "REST API"@ja ;
    skos:definition "HTTPを介してJSONやXMLなどの構造化データをやり取りする、Webベースのアプリケーションプログラミングインターフェース。"@ja ;
    skos:altLabel "Web API" ;
    ks:requires <https://comcomponent.com/knowledge/stateless/> .

<https://comcomponent.com/knowledge/jwt/> a skos:Concept ;
    skos:prefLabel "JWT(JSON Web Token)"@ja ;
    skos:definition "ヘッダ、ペイロード、署名をBase64Urlで連結したJSON形式のクレーム表現。署名・暗号化は任意であり、alg=noneのように署名がないトークンもありえる。"@ja ;
    skos:altLabel "JSON Web Token" .

<https://comcomponent.com/knowledge/authorization/> a skos:Concept ;
    skos:prefLabel "認可"@ja ;
    skos:definition "認証された利用者に対し、その利用者がどのリソースや操作を許可されるかを判断すること。"@ja ;
    skos:altLabel "authorization" .

<https://comcomponent.com/knowledge/waf/> a skos:Concept ;
    skos:prefLabel "WAF(Web Application Firewall)"@ja ;
    skos:definition "ウェブサイトへの通信を監視し、攻撃とみなした通信を遮断する仕組み。位置づけは保険的対策で、根本的解決の代わりにはならない。"@ja ;
    skos:altLabel "Web Application Firewall" .

<https://comcomponent.com/knowledge/stateless/> a skos:Concept ;
    skos:prefLabel "ステートレス"@ja ;
    skos:definition "サーバーがクライアントとの会話状態を保持せず、各リクエストだけで処理に必要な全情報を含む方式。"@ja ;
    skos:altLabel "stateless" .

<https://comcomponent.com/knowledge/authentication/> a skos:Concept ;
    skos:prefLabel "認証"@ja ;
    skos:definition "利用者が主張する身份を確認すること。パスワード、ワンタイムパスワード、または短期認証コードなどで行われる。"@ja ;
    skos:altLabel "authentication" ;
    ks:shouldPrecede <https://comcomponent.com/knowledge/authorization/> .

<https://comcomponent.com/knowledge/jwt-signature-verification/> a skos:Concept ;
    skos:prefLabel "JWT署名検証"@ja ;
    skos:definition "JWTの署名を信頼する鍵で検証し、ヘッダとペイロードの改ざんを検出する処理。"@ja ;
    skos:broader <https://comcomponent.com/knowledge/jwt/> ;
    ks:configuredBy <https://comcomponent.com/knowledge/jwt-allowed-algorithms/> .

<https://comcomponent.com/knowledge/jwt-allowed-algorithms/> a skos:Concept ;
    skos:prefLabel "JWT許可アルゴリズムリスト"@ja ;
    skos:definition "JWT署名検証で利用を許可するアルゴリズムをサーバー側の設定で狭く固定したリスト。alg=noneや弱いアルゴリズムの選択を防ぐ。"@ja ;
    skos:altLabel "allowed algorithms" ;
    skos:altLabel "許可リスト"@ja ;
    skos:broader <https://comcomponent.com/knowledge/jwt/> .

<https://comcomponent.com/knowledge/account-takeover/> a skos:Concept ;
    skos:prefLabel "アカウント乗っ取り"@ja ;
    skos:definition "第三者が正規利用者になりすましてアカウントを制御できるようになること。"@ja .

<https://comcomponent.com/knowledge/jwt-alg-none/> a skos:Concept ;
    skos:prefLabel "JWTのalg=none攻撃"@ja ;
    skos:definition "JWTヘッダのalgをnoneに書き換え、署名検証を回避しようとする攻撃。サーバーがalgヘッダの値に従って検証アルゴリズムを選ぶ実装で成立する。"@ja ;
    skos:altLabel "alg=none" ;
    skos:altLabel "algorithm confusion" ;
    skos:broader <https://comcomponent.com/knowledge/jwt/> .

<https://comcomponent.com/knowledge/bola/> a skos:Concept ;
    skos:prefLabel "BOLA(オブジェクト単位の認可不備)"@ja ;
    skos:definition "認証された利用者が、URLやパラメータで指定する他人のオブジェクトにアクセス・更新できる脆弱性。"@ja ;
    skos:altLabel "Broken Object Level Authorization" ;
    skos:broader <https://comcomponent.com/knowledge/access-control-flaw/> .

<https://comcomponent.com/knowledge/unauthorized-data-access/> a skos:Concept ;
    skos:prefLabel "未許可データアクセス"@ja ;
    skos:definition "本来許可されていない他者のデータを取得・更新できること。"@ja ;
    skos:altLabel "unauthorized data access" .

<https://comcomponent.com/knowledge/update-dto-allowlist/> a skos:Concept ;
    skos:prefLabel "更新用DTOの許可リスト"@ja ;
    skos:definition "更新対象とするプロパティだけを列挙したデータ転送オブジェクト。許可リストにないプロパティは内部オブジェクトにバインドされず、必要に応じて拒否または監査される。Mass Assignmentを防ぐために用いられる。"@ja ;
    skos:altLabel "allowlist DTO" .

<https://comcomponent.com/knowledge/mass-assignment/> a skos:Concept ;
    skos:prefLabel "Mass Assignment(プロパティ単位の認可不備)"@ja ;
    skos:definition "リクエストに含まれる予期しないプロパティがサーバーの内部オブジェクトにそのまま反映され、権限を超える更新ができる脆弱性。"@ja ;
    skos:altLabel "一括代入"@ja ;
    skos:altLabel "Broken Object Property Level Authorization" ;
    skos:broader <https://comcomponent.com/knowledge/access-control-flaw/> .

<https://comcomponent.com/knowledge/privilege-escalation/> a skos:Concept ;
    skos:prefLabel "権限昇格"@ja ;
    skos:definition "認証された利用者が、許可されていない高い権限や状態へ変更できる脆弱性の結果。"@ja ;
    skos:altLabel "privilege escalation" .

<https://comcomponent.com/knowledge/four-digit-auth-code/> a skos:Concept ;
    skos:prefLabel "4桁認証コード"@ja ;
    skos:definition "4桁の数値で構成される短期認証コード。候補数が1万通りしかなく、総当たりに対して弱い。"@ja ;
    skos:altLabel "short authentication code" ;
    skos:broader <https://comcomponent.com/knowledge/authentication/> .

<https://comcomponent.com/knowledge/brute-force/> a skos:Concept ;
    skos:prefLabel "総当たり攻撃(ブルートフォース)"@ja ;
    skos:definition "認証コードやパスワードを自動的に列挙して試行する攻撃。"@ja ;
    skos:altLabel "brute-force attack" .

<https://comcomponent.com/knowledge/account-lockout/> a skos:Concept ;
    skos:prefLabel "アカウントロック"@ja ;
    skos:definition "認証失敗が連続した場合にアカウントや端末を一時的にロックし、追加の試行を防ぐ仕組み。"@ja ;
    skos:altLabel "account lockout" ;
    skos:altLabel "試行回数制限"@ja .

<https://comcomponent.com/knowledge/log4shell/> a skos:Concept ;
    skos:prefLabel "Log4Shell(CVE-2021-44228)"@ja ;
    skos:definition "Apache Log4j 2のJNDI Lookup機能に起因する脆弱性。ログメッセージ中の文字列がJNDI Lookupとして評価され、外部リソースを取得する。"@ja ;
    skos:altLabel "CVE-2021-44228" ;
    ks:uses <https://comcomponent.com/knowledge/jndi-lookup/> .

<https://comcomponent.com/knowledge/jndi-lookup/> a skos:Concept ;
    skos:prefLabel "JNDI Lookup"@ja ;
    skos:definition "Java Naming and Directory Interfaceを使って、LDAPやHTTPなどの外部リソース名をJavaオブジェクトに解決する機構。"@ja ;
    skos:altLabel "JNDI" .

<https://comcomponent.com/knowledge/arbitrary-code-execution/> a skos:Concept ;
    skos:prefLabel "任意コード実行"@ja ;
    skos:definition "攻撃者が任意のプログラムコードを対象システム上で実行できる状態。"@ja ;
    skos:altLabel "arbitrary code execution" .

<https://comcomponent.com/knowledge/library-update/> a skos:Concept ;
    skos:prefLabel "ライブラリの修正版への更新"@ja ;
    skos:definition "脆弱性のあるライブラリを修正版に置き換える対応。脆弱性の根本的な解消となる。"@ja ;
    skos:altLabel "security patch update" .

<https://comcomponent.com/knowledge/waf-detection-mode/> a skos:Concept ;
    skos:prefLabel "WAF検知モード"@ja ;
    skos:definition "WAFが攻撃と思われる通信を検知してログに記録するが、遮断しない動作モード。導入初期や誤検知確認時に使われる。"@ja ;
    skos:altLabel "WAF detection mode" ;
    skos:broader <https://comcomponent.com/knowledge/waf/> .

<https://comcomponent.com/knowledge/waf-blocking-mode/> a skos:Concept ;
    skos:prefLabel "WAF遮断モード"@ja ;
    skos:definition "WAFがルールに一致する通信を遮断する動作モード。"@ja ;
    skos:altLabel "WAF blocking mode" ;
    skos:broader <https://comcomponent.com/knowledge/waf/> .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/rest-api/> ;
    rdf:predicate ks:requires ;
    rdf:object <https://comcomponent.com/knowledge/stateless/> ;
    schema:description "RESTful APIはサーバーが会話状態を保持せず、各リクエストだけで必要な情報を含むステートレスな方式を取る。"@ja ;
    ks:evidence <https://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/authentication/> ;
    rdf:predicate ks:shouldPrecede ;
    rdf:object <https://comcomponent.com/knowledge/authorization/> ;
    schema:description "認証（誰であるか）が済んでも、認可（何ができるか）は別の判定である。認可の前に認証を済ませるべきだが、認証成功は認可を自動的には与えない。"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/m42obm000000afqx-att/2024r06h_sc_pm_ans.pdf>, <https://www.ipa.go.jp/security/vuln/websecurity/about.html> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/jwt/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/jwt-signature-verification/> ;
    schema:description "署名を伴うJWT、または本APIが受け入れるJWTでは、ヘッダとペイロードの改ざんを検出するため、信頼する鍵を使った署名検証を利用する。"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc7519.html> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/jwt-signature-verification/> ;
    rdf:predicate ks:configuredBy ;
    rdf:object <https://comcomponent.com/knowledge/jwt-allowed-algorithms/> ;
    schema:description "JWT署名検証はサーバー側で利用を許可するアルゴリズムを固定したリストで構成すべきである。"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc8725.html>, <https://www.ipa.go.jp/shiken/mondai-kaiotu/m42obm000000afqx-att/2024r06h_sc_pm_ans.pdf> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/jwt-allowed-algorithms/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/account-takeover/> ;
    schema:description "利用を許可するアルゴリズムをRS256などに固定し、攻撃者がalg=noneや弱いアルゴリズムを指定して利用者IDを書き換える攻撃を防ぐ。"@ja ;
    ks:evidence <https://www.rfc-editor.org/rfc/rfc8725.html>, <https://www.ipa.go.jp/shiken/mondai-kaiotu/m42obm000000afqx-att/2024r06h_sc_pm_ans.pdf> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/jwt-alg-none/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/account-takeover/> ;
    schema:description "JWTヘッダのalgをnoneに書き換えると署名検証がスキップされ、ペイロードの利用者IDを自由に書き換えて他人になりすませる。"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/m42obm000000afqx-att/2024r06h_sc_pm_ans.pdf>, <https://www.rfc-editor.org/rfc/rfc8725.html> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/authorization/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/bola/> ;
    schema:description "リクエスト内の利用者ID(mid)とJWTが示す主体を照合するなど、オブジェクト単位の認可を実施すれば、他人の情報へのアクセスを防ぐ。"@ja ;
    ks:evidence <https://owasp.org/API-Security/editions/2023/en/0xa1-broken-object-level-authorization/>, <https://www.ipa.go.jp/shiken/mondai-kaiotu/m42obm000000afqx-att/2024r06h_sc_pm_ans.pdf> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/bola/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/unauthorized-data-access/> ;
    schema:description "正しいJWTを持ったままリクエストのmidを他の利用者IDに差し替えると、本人の認可なしに他人のデータを取得・更新できる。"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/m42obm000000afqx-att/2024r06h_sc_pm_ans.pdf>, <https://owasp.org/API-Security/editions/2023/en/0xa1-broken-object-level-authorization/> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/update-dto-allowlist/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/mass-assignment/> ;
    schema:description "更新可能なプロパティだけを許可リストにしたDTOを使い、未知のプロパティを内部オブジェクトにバインドしない（可能なら拒否・監査）ことで、status=paidのような予期しない更新を防ぐ。"@ja ;
    ks:evidence <https://owasp.org/API-Security/editions/2023/en/0xa3-broken-object-property-level-authorization/>, <https://www.ipa.go.jp/shiken/mondai-kaiotu/m42obm000000afqx-att/2024r06h_sc_pm_ans.pdf> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/mass-assignment/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/privilege-escalation/> ;
    schema:description "仕様にないstatus=paidなどのプロパティをリクエストに追加して自動バインドされると、無償利用者が有償利用者の状態へ変更されうる。"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/m42obm000000afqx-att/2024r06h_sc_pm_ans.pdf>, <https://owasp.org/API-Security/editions/2023/en/0xa3-broken-object-property-level-authorization/> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/four-digit-auth-code/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/brute-force/> ;
    schema:description "4桁の数値認証コードは候補数が1万通りしかなく、制限がなければ自動的に総当たりされやすい。"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/m42obm000000afqx-att/2024r06h_sc_pm_ans.pdf>, <https://pages.nist.gov/800-63-4/sp800-63b.html> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/brute-force/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/account-takeover/> ;
    schema:description "認証コードを総当たりで当てれば、本来なら到達できない利用者のJWTを取得し、認証を突破できる。"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/m42obm000000afqx-att/2024r06h_sc_pm_ans.pdf>, <https://pages.nist.gov/800-63-4/sp800-63b.html> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/account-lockout/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/brute-force/> ;
    schema:description "連続失敗回数がしきい値を超えたらアカウントをロックすることで、4桁認証コードに対する総当たり攻撃を抑える。"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/m42obm000000afqx-att/2024r06h_sc_pm_ans.pdf>, <https://pages.nist.gov/800-63-4/sp800-63b.html> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/log4shell/> ;
    rdf:predicate ks:uses ;
    rdf:object <https://comcomponent.com/knowledge/jndi-lookup/> ;
    schema:description "Log4Shellは、ログメッセージ中の文字列をJNDI Lookupとして評価し、LDAP/HTTPなどの外部リソースを解決する仕組みを悪用する。"@ja ;
    ks:evidence <https://logging.apache.org/security.html#CVE-2021-44228>, <https://www.ipa.go.jp/shiken/mondai-kaiotu/m42obm000000afqx-att/2024r06h_sc_pm_ans.pdf> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "established" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/jndi-lookup/> ;
    rdf:predicate ks:mayCause ;
    rdf:object <https://comcomponent.com/knowledge/arbitrary-code-execution/> ;
    schema:description "制御可能な文字列がログに出力され、脆弱なライブラリがJNDI Lookupを評価すると、外部から任意のコードを実行できる。"@ja ;
    ks:evidence <https://logging.apache.org/security.html#CVE-2021-44228>, <https://docs.oracle.com/javase/tutorial/jndi/overview/index.html> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/waf/> ;
    rdf:predicate ks:mitigates ;
    rdf:object <https://comcomponent.com/knowledge/log4shell/> ;
    schema:description "WAFはJNDI/ldapなどの文字列をHTTPリクエストから検知し、Log4Shell攻撃の到達を一時的に軽減する。"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/m42obm000000afqx-att/2024r06h_sc_pm_ans.pdf>, <https://www.ipa.go.jp/security/vuln/websecurity/about.html> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/library-update/> ;
    rdf:predicate ks:prevents ;
    rdf:object <https://comcomponent.com/knowledge/log4shell/> ;
    schema:description "脆弱性のあるLog4jなどのライブラリを修正版に置き換えることで、JNDI Lookupによる攻撃経路を根本的に塞ぐ。"@ja ;
    ks:evidence <https://logging.apache.org/security.html#CVE-2021-44228>, <https://www.ipa.go.jp/shiken/mondai-kaiotu/m42obm000000afqx-att/2024r06h_sc_pm_ans.pdf> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "context-dependent" .

[] a rdf:Statement ;
    rdf:subject <https://comcomponent.com/knowledge/waf-detection-mode/> ;
    rdf:predicate ks:shouldPrecede ;
    rdf:object <https://comcomponent.com/knowledge/waf-blocking-mode/> ;
    schema:description "WAFを遮断モードに移す前に検知モードで運用し、誤検知による正規通信の遮断を確認してから本番適用するべきである。"@ja ;
    ks:evidence <https://www.ipa.go.jp/shiken/mondai-kaiotu/m42obm000000afqx-att/2024r06h_sc_pm_ans.pdf>, <https://www.ipa.go.jp/security/vuln/websecurity/about.html> ;
    ks:verifiedAt "2026-08-06" ;
    ks:certainty "context-dependent" .
