本卡屬 FR-114 資安修正(母卡 CM-2019),第 5 批「信任鏈與客戶層級設定」卡 5A-4,修 SUMMARY #20/#93(出自 M09-2+M21-1/M09-4),並依決策者裁定 D-X2(公式中和函式放 jedi-common,先套件側再 BE 接上)合併 SUMMARY #102/總表126(原第 5 批 C 子集卡 5C-7)。高。修法規格來自內化卡 CM-1987(M09)與 CM-1997(M21),計畫在 docs/features/FR-114-2609-security-fix-dispatch/batches/plan-b5A.md「卡 5A-4」段與 plan-b5C.md「卡 5C-7」段(本卡已把兩段合併執行)。

問題是什麼(白話)

#20:操作日誌匯出與意見回饋匯出兩個 Excel 出口,都沒有處理「使用者填的字第一個字元剛好是 =/+/-/@」的狀況——Excel 會把這種字串當成公式執行,等於使用者填的一段文字可以變成在別人電腦上跑的公式(俗稱 CSV/Excel 公式注入)。

#93:日誌轉送把換行字元原封不動送出去,攻擊者只要在填寫欄位裡塞一個換行,就能讓一筆偽造的假日誌被當成獨立一筆送到日誌伺服器,混淆稽核紀錄。

#102/總表126(合併進本卡):Word 匯出時 docxtpl(範本引擎)的自動轉義預設是關閉的,使用者填的字串沒被轉義直接塞進 Word/PDF/ODT 三種匯出格式共用的產生器;另一個 Excel 匯出(OSCAL 控制措施匯入)也有跟 #20 一模一樣的公式注入問題。

首腦核對:

工作區

在哪裡

jedi-log/jedi_api_log/api_log/app/service/api_log_service.py:77    export_api_log_file,#20 匯出入口
jedi-log/jedi_api_log/api_log/app/service/api_log_service.py:81,87,96,88-89    ExcelWriter 寫入行,需套用中和函式
jedi-log/jedi_api_log/api_log/common/utils/excel_util.py    ExcelUtil,掛載候選位置
jedi-log/jedi_api_log/api_log/app/dto/api_log_export.py    匯出欄位清單
jedi-log/jedi_api_log/api_log/api/routing.py:18    路由
jedi-issue/jedi_issue/app/feedback/service/feedback_service.py:337    export_feedbacks 入口
jedi-issue/jedi_issue/app/feedback/service/feedback_service.py:359    四個可控欄位組 row
jedi-issue/jedi_issue/app/feedback/service/feedback_service.py:370-380    csv 分支,需套用中和函式(兩入口只改一邊的典型,兩分支都要改)
jedi-issue/jedi_issue/app/feedback/service/feedback_service.py:381-391    excel 分支,同上
jedi-issue/jedi_issue/plugin/__init__.py:10    路由
jedi-log/jedi_api_log/forwarding/common/forwarder.py:232    RFC5424 組裝行,#93 核心
jedi-log/jedi_api_log/forwarding/common/forwarder.py:222-234    formatter
jedi-log/jedi_api_log/forwarding/common/forwarder.py:198    build_rfc5424_formatter
jedi-log/jedi_api_log/forwarding/common/forwarder.py:163-196    build_target_handler
jedi-log/jedi_api_log/forwarding/common/forwarder.py:189    ⚠️既有陷阱註解(append_nul=False),不要弄掉
jedi-log/jedi_api_log/forwarding/common/gelf_handler.py:88    _build_payload,理論上 JSON 格式免疫,需開檔實查確認、不能只靠推論
jedi-log/jedi_api_log/forwarding/common/gelf_handler.py:136,142    GELF 側相關處理
jedi-log/jedi_api_log/error_tracking/masking.py    現成遮蔽工具候選
app/oscal/service/export/ssp_docx_generator.py:60    tpl.render 缺 autoescape=True,#102 核心
app/oscal/service/export/ssp_docx_generator.py:57-69    整支 generate 函式,內含 _append_control_sections/_append_reference_docs 直接用 python-docx,需另確認有無同漏洞
app/oscal/service/ssp_control_impl_import_service.py:139    總表126 第一寫入點
app/oscal/service/ssp_control_impl_import_service.py:163    總表126 第二寫入點

怎麼修