Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
c35584c
docs: init tasks.md for issue #311 Excel docs MD readability
kiyotis Apr 27, 2026
cc080c9
docs: update tasks.md — fix sheet-classification source, add PR #314
kiyotis Apr 27, 2026
bf799b5
docs: update tasks.md — add investigation results and P1/P2 pattern b…
kiyotis Apr 27, 2026
4b2ebb8
docs: update tasks.md — restructure [A] to produce sheet mapping tabl…
kiyotis Apr 27, 2026
9757ca9
docs: update tasks.md — sheet mapping table goes to separate file, no…
kiyotis Apr 27, 2026
283f10e
docs: update tasks.md — record 1.概要/マルチパートリクエスト column structure find…
kiyotis Apr 27, 2026
6874d19
docs: update tasks.md — restructure into A-E phases (investigate/map/…
kiyotis Apr 27, 2026
926b90f
docs: update tasks.md — record P2-1 column-indent investigation results
kiyotis Apr 28, 2026
ee81be1
docs: update tasks.md — sheet-mapping.md generated (212 sheets classi…
kiyotis Apr 28, 2026
9403371
docs: update tasks.md — [B] next steps: move to rbkc/docs, add sample…
kiyotis Apr 28, 2026
25a6c39
docs: move sheet-mapping to tools/rbkc/docs, add conversion samples
kiyotis Apr 28, 2026
9a62846
docs: add conversion-samples.md for P2-1/P2-2/P2-3 review
kiyotis Apr 28, 2026
a9a6ac5
docs: replace conversion-samples.md with per-file samples (P2-1/P2-2/…
kiyotis Apr 28, 2026
215b22b
docs: add per-pattern samples flat under samples/ (P1/P2-1/P2-2/P2-3)
kiyotis Apr 28, 2026
a41a534
docs: fix samples — full チェックリスト, readable バージョンアップ手順
kiyotis Apr 28, 2026
7ebb0a6
docs: update tasks.md — [B] complete, next [C] design update
kiyotis Apr 28, 2026
a5f563a
docs: update tasks.md — [C] design docs updated, expert review done
kiyotis Apr 28, 2026
2c54c50
docs: update §8 design spec for P2-1/P2-3 patterns + verify exceptions
kiyotis Apr 28, 2026
e980f0b
docs: update tasks.md — [C] blocked on P2-1 QO1 design review
kiyotis Apr 28, 2026
a800eac
docs: update tasks.md — [C] design revised with p2_headings sequentia…
kiyotis Apr 28, 2026
ee062ca
docs: redesign P2-1 QO1 check — p2_headings sequential matching
kiyotis Apr 28, 2026
bfaf687
feat: implement P2-1/P2-3 Excel docs MD rendering and verify checks (…
kiyotis Apr 28, 2026
a5fc5ca
docs: update tasks.md — [D] complete, [C] done, next [E] expert review
kiyotis Apr 28, 2026
e78666d
docs: update §3-4 test-class table + save expert review results (#311)
kiyotis Apr 28, 2026
8ae534f
docs: update tasks.md — [E] complete, all tasks done
kiyotis Apr 28, 2026
e044d0d
docs: update tasks.md — add [F] P2-1 ####-本文バグ調査タスク
kiyotis Apr 28, 2026
59bcd30
fix: P2-1 heading detection — absolute column, single-cell-only rule
kiyotis Apr 28, 2026
4b11e55
chore: regenerate all knowledge files after P2-1 heading detection fix
kiyotis Apr 28, 2026
74b91eb
docs: update tasks.md — [F] complete
kiyotis Apr 28, 2026
d2204af
docs: add diff check result for PR #314
kiyotis Apr 28, 2026
55808f3
docs: update tasks.md — add [G] rebase + scope investigation task
kiyotis Apr 28, 2026
fe2765c
chore: regenerate knowledge JSON for all 5 versions after block_quote…
kiyotis Apr 28, 2026
55a746a
docs: update diff-check.md — post-rebase, include knowledge JSON rege…
kiyotis Apr 28, 2026
1068798
docs: update tasks.md — [G] steps completed, push remaining
kiyotis Apr 28, 2026
e061769
docs: update tasks.md — [G] complete, all tasks done
kiyotis Apr 28, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
Original file line number Diff line number Diff line change
@@ -1,16 +1,29 @@
# JSON読み取り失敗ケース

①配列が入れ子かつ、内部の配列がオブジェクトの最後の項目でない場合、実行時例外が発生する。
以下のような構造で実行時例外が発生する。
②オブジェクトの最後の項目の値が":"1文字の場合、実行時例外が発生する。
":"を値に持つ項目より後に項目がある場合は例外は発生しない。
### ①配列が入れ子かつ、内部の配列がオブジェクトの最後の項目でない場合、実行時例外が発生する。

#### 以下のような構造で実行時例外が発生する。

### ②オブジェクトの最後の項目の値が":"1文字の場合、実行時例外が発生する。

#### ":"を値に持つ項目より後に項目がある場合は例外は発生しない。

←NG 例外が発生する。 ←OK 例外は発生せず記述した通りに読み取られる。

←NG 例外が発生する。
③オブジェクトの最後の項目の値が"{"、"}"、"["、"]"のいずれか1文字の場合、該当項目が読み取られない。
最後の項目でなければ記述した通りに読み取られる。

### ③オブジェクトの最後の項目の値が"{"、"}"、"["、"]"のいずれか1文字の場合、該当項目が読み取られない。

#### 最後の項目でなければ記述した通りに読み取られる。

←NG keyも"{"も読み取られない。 ←OK key1~key3まで記述した通りに読み取られる。

空のオブジェクトになる。

←NG key1の項目だけ読み取られる。
④配列の値が"}"、"["のいずれか1文字の場合、該当する配列の要素が読み取られない。

### ④配列の値が"}"、"["のいずれか1文字の場合、該当する配列の要素が読み取られない。

←NG keyの値は空配列として読み取られる。

←NG keyの値は"value"だけを要素にもつ配列として読み取られる。
Original file line number Diff line number Diff line change
@@ -1,81 +1,159 @@
# ■【不具合報告】Nablarch 汎用データフォーマット XXE脆弱性について

この度、Nablarch 汎用データフォーマット機能について、後述する脆弱性が発見されました。
本報告書にて、脆弱性の内容、システム影響、および対応方法についてご報告致します。
1. 汎用データフォーマット機能の概要
システムで扱う多様なデータ形式に対応した汎用の入出力ライブラリ機能を提供します。
・ 固定長
・ 可変長(csvやtsvなど)
・ JSON
・ XML
Nablarchドキュメント 「汎用データフォーマット」
Nablarch Application Framework 解説書:汎用データフォーマット機能
2. 本脆弱性について
2.1. 脆弱性の概要
### この度、Nablarch 汎用データフォーマット機能について、後述する脆弱性が発見されました。

### 本報告書にて、脆弱性の内容、システム影響、および対応方法についてご報告致します。

### 1. 汎用データフォーマット機能の概要

#### システムで扱う多様なデータ形式に対応した汎用の入出力ライブラリ機能を提供します。

#### ・ 固定長

#### ・ 可変長(csvやtsvなど)

#### ・ JSON

#### ・ XML

#### Nablarchドキュメント 「汎用データフォーマット」

#### Nablarch Application Framework 解説書:汎用データフォーマット機能

### 2. 本脆弱性について

#### 2.1. 脆弱性の概要

汎用データフォーマット機能にて、XML文書を読み込むときにXXE(XML External Entity)攻撃を受ける可能性があります。

XXE攻撃はNablarch特有のものではなく一般的な攻撃方法となります。

XML文書の構造を定義するためのDTD(Document Type Definition)の機能を利用して攻撃を行います。

詳細は以下のサイト等を参照ください。

https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing
2.2. 本脆弱性が発生するNablarchのバージョン

#### 2.2. 本脆弱性が発生するNablarchのバージョン

5系と1.4系の全てのバージョンで発生します。
2.3. 本脆弱性の対象となるシステム

#### 2.3. 本脆弱性の対象となるシステム

汎用データフォーマット機能を利用してXML文書を入力しているシステム

典型的な使用ケースとして以下が挙げられます。

・ XML電文を受け取るHTTPメッセージングシステム

・ XMLファイルを入力する処理(バッチ,画面等の処理形態に依存しない)
2.4. 本脆弱性によるシステム影響

#### 2.4. 本脆弱性によるシステム影響

XML文書を入力する時にXXE攻撃を受ける可能性があります。

攻撃パターンは多岐に渡りますが、情報漏えいやシステム停止が発生する恐れがあります。
2.5. 攻撃方法

#### 2.5. 攻撃方法

典型的には以下のような攻撃が挙げられます。

・ 本来外部から読み取れないはずのファイルをシステム経由で読み取る

・ システムのスローダウンないしシステム停止を発生させる

※上記は一例です。詳細はOWASP等のサイトを参照ください。

https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Processing

【ファイル読み取りの例】

以下の例では、<root>要素にsecret.txtの内容が展開されます。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE name [

<!ENTITY sc SYSTEM "file:///path/to/secret.txt">

]>

<root>&sc;</root>

【DoS攻撃の例】

以下の例では、処理が戻らないリソースに意図的にアクセスすることで、システムの処理を停止させます。

<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE foo [

<!ELEMENT foo ANY >

<!ENTITY xxe SYSTEM "file:///dev/random" >]><foo>&xxe;</foo>
3. 不具合原因と対応方法(Nablarch)
NablarchはXML文書を扱うためにXMLライブラリ(JAXP)を使用しています。
デフォルトではDTDが使用可能になっており、これを明示的に使用不可に設定していないことが不具合原因となります。
よって、対処としては、XMLライブラリを使用する際にDTDを使用できない設定を行います。
※この対処方法はOWASPが提示した対応方法のうち第一に推奨されるものです。
https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#JAXP_DocumentBuilderFactory.2C_SAXParserFactory_and_DOM4J
バージョンアップ後は、DTDを使用したXML文書が入力された場合は読み込み処理が停止し、例外が発生するようになります。
これによりXXE攻撃が無効になります。
DTDを使用したXML文書が入力された場合、入出力データ不正により処理が継続できないことを示す例外クラス
nablarch.core.dataformat.InvalidDataFormatException がスローされます。これは、不正なフォーマットのXML文書を入力した場合と同じ動作です。
4. 対応方法(Nablarch利用プロジェクト)
4.1. 基本的な対応方法
本脆弱性の対象となるシステムは、最新版へのバージョンアップを行ってください。
バージョンアップにより、DTDが使用できなくなりXXE攻撃が無効になります。
もし意図的にDTDを使用しているシステムがあれば、XML Schema等の代替技術に置き換える等の対処を行い、DTDの使用を止めるようにしてください。
4.2. バージョンアップが困難な場合の回避方法

### 3. 不具合原因と対応方法(Nablarch)

#### NablarchはXML文書を扱うためにXMLライブラリ(JAXP)を使用しています。

#### デフォルトではDTDが使用可能になっており、これを明示的に使用不可に設定していないことが不具合原因となります。

#### よって、対処としては、XMLライブラリを使用する際にDTDを使用できない設定を行います。

#### ※この対処方法はOWASPが提示した対応方法のうち第一に推奨されるものです。

#### https://www.owasp.org/index.php/XML_External_Entity_(XXE)_Prevention_Cheat_Sheet#JAXP_DocumentBuilderFactory.2C_SAXParserFactory_and_DOM4J

#### バージョンアップ後は、DTDを使用したXML文書が入力された場合は読み込み処理が停止し、例外が発生するようになります。

#### これによりXXE攻撃が無効になります。

#### DTDを使用したXML文書が入力された場合、入出力データ不正により処理が継続できないことを示す例外クラス

#### nablarch.core.dataformat.InvalidDataFormatException がスローされます。これは、不正なフォーマットのXML文書を入力した場合と同じ動作です。

### 4. 対応方法(Nablarch利用プロジェクト)

#### 4.1. 基本的な対応方法

#### 本脆弱性の対象となるシステムは、最新版へのバージョンアップを行ってください。

#### バージョンアップにより、DTDが使用できなくなりXXE攻撃が無効になります。

#### もし意図的にDTDを使用しているシステムがあれば、XML Schema等の代替技術に置き換える等の対処を行い、DTDの使用を止めるようにしてください。

#### 4.2. バージョンアップが困難な場合の回避方法

推奨はしかねますが、「XXE攻撃を受ける可能性が全くない」と判断できる場合に限り、

リスクを許容した上でバージョンアップを行わないという選択肢もあり得ます。

【XXE攻撃を受けないと判断する例】

・ システム内部で作成したXML文書しか扱わない

・ システム間で事前に取り決めを行ったフォーマットだけしか扱わない

このように、XXE攻撃に繋がるようなDTDが一切使われない場合は、

脆弱性を攻撃される可能性がないと考えてリスクを許容するという判断もあり得えます。

※ただし、今後のシステム改修で扱うXML文書の種類が増える可能性があったり、内部の関係者による攻撃の可能性には対応できません。

DTDが使用されないことが保証できない場合、回避方法はありません。
4.3. 本件に関わるJDKのバグについて

#### 4.3. 本件に関わるJDKのバグについて

以下のバージョンのJDKにはAPIに不具合があり、DTDの無効化を行った場合にNullPointerExceptionが発生します。

・ JDK6 6u65 未満

・ JDK7 7u6 b15 未満

本バグを回避するには、JDKのバージョンをアップする必要があります。

不具合詳細は 以下を参照ください。

JDK-7157610 : NullPointerException occurs when parsing XML doc

https://bugs.java.com/bugdatabase/view_bug.do?bug_id=7157610
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,130 @@
"content": "①配列が入れ子かつ、内部の配列がオブジェクトの最後の項目でない場合、実行時例外が発生する。\n以下のような構造で実行時例外が発生する。\n②オブジェクトの最後の項目の値が\":\"1文字の場合、実行時例外が発生する。\n\":\"を値に持つ項目より後に項目がある場合は例外は発生しない。\n←NG 例外が発生する。 ←OK 例外は発生せず記述した通りに読み取られる。\n←NG 例外が発生する。\n③オブジェクトの最後の項目の値が\"{\"、\"}\"、\"[\"、\"]\"のいずれか1文字の場合、該当項目が読み取られない。\n最後の項目でなければ記述した通りに読み取られる。\n←NG keyも\"{\"も読み取られない。 ←OK key1~key3まで記述した通りに読み取られる。\n空のオブジェクトになる。\n←NG key1の項目だけ読み取られる。\n④配列の値が\"}\"、\"[\"のいずれか1文字の場合、該当する配列の要素が読み取られない。\n←NG keyの値は空配列として読み取られる。\n←NG keyの値は\"value\"だけを要素にもつ配列として読み取られる。",
"no_knowledge_content": false,
"sections": [],
"sheet_type": "P2"
"sheet_type": "P2",
"p2_headings": [
{
"text": "①配列が入れ子かつ、内部の配列がオブジェクトの最後の項目でない場合、実行時例外が発生する。",
"level": 3
},
{
"text": "以下のような構造で実行時例外が発生する。",
"level": 4
},
{
"text": "②オブジェクトの最後の項目の値が\":\"1文字の場合、実行時例外が発生する。",
"level": 3
},
{
"text": "\":\"を値に持つ項目より後に項目がある場合は例外は発生しない。",
"level": 4
},
{
"text": "③オブジェクトの最後の項目の値が\"{\"、\"}\"、\"[\"、\"]\"のいずれか1文字の場合、該当項目が読み取られない。",
"level": 3
},
{
"text": "最後の項目でなければ記述した通りに読み取られる。",
"level": 4
},
{
"text": "④配列の値が\"}\"、\"[\"のいずれか1文字の場合、該当する配列の要素が読み取られない。",
"level": 3
}
],
"p2_raw_lines": [
[
[
1,
"①配列が入れ子かつ、内部の配列がオブジェクトの最後の項目でない場合、実行時例外が発生する。"
]
],
[
[
2,
"以下のような構造で実行時例外が発生する。"
]
],
[
[
1,
"②オブジェクトの最後の項目の値が\":\"1文字の場合、実行時例外が発生する。"
]
],
[
[
2,
"\":\"を値に持つ項目より後に項目がある場合は例外は発生しない。"
]
],
[
[
5,
"←NG 例外が発生する。"
],
[
12,
"←OK 例外は発生せず記述した通りに読み取られる。"
]
],
[
[
5,
"←NG 例外が発生する。"
]
],
[
[
1,
"③オブジェクトの最後の項目の値が\"{\"、\"}\"、\"[\"、\"]\"のいずれか1文字の場合、該当項目が読み取られない。"
]
],
[
[
2,
"最後の項目でなければ記述した通りに読み取られる。"
]
],
[
[
5,
"←NG keyも\"{\"も読み取られない。"
],
[
12,
"←OK key1~key3まで記述した通りに読み取られる。"
]
],
[
[
5,
"空のオブジェクトになる。"
]
],
[
[
5,
"←NG key1の項目だけ読み取られる。"
]
],
[
[
1,
"④配列の値が\"}\"、\"[\"のいずれか1文字の場合、該当する配列の要素が読み取られない。"
]
],
[
[
5,
"←NG keyの値は空配列として読み取られる。"
]
],
[
[
5,
"←NG keyの値は\"value\"だけを要素にもつ配列として読み取られる。"
]
]
],
"p2_base_col": 0
}
Loading