XXEとActiveScript
XXEとは
XXE(XML External Entity)とは、XMLの外部参照機能を利用して、サーバ内部のファイル内容を取得(漏えい)したり、内部ネットワーク上のファイルにアクセスしたりする不正行為
XXEは、XMLを扱うアプリケーションで発現する可能性があるので、XML文書を取り扱う際には注意する必要がある。
ActiveScriptとXML
ActiveScript(VBScript/JScript)&WSH/ASPでXMLを扱うには、MS-XMLの利用が考えられる。
よって、以降は、MS-XML を使って、再現させたり、対策を考えてみたりしよう。
テスト環境
Windows10+WSH5.8+VBScript
結論
とりあえず、MS-XML では、外部参照は無効化されているので心配しなくてよいのかもしれない。
→私の環境だけの話かもしれないという点は留意してほしい
MS-XMLでXMLを読む
loadするファイルを普通のin.xmlにすると、こんな感じ。
読めた。
MS-XMLで外部参照のあるXMLを読む
loadするファイルを普通のin1.xmlにすると、こんな感じ。
読めない。エラーになった。
resolveExternals プロパティ
外部参照を読む/読まないを制御するフラグがあるようなのだけど、どうも私の環境では有効に機能しないようだ。
IE XXE
IE XXEという話もあるようなので、WSH/ASPでもXXEには注意した方がいいような気がするのだけど、自分の環境で動作しないとなると、どうにもならない orz
ソースコード(testvbs.vbs)
Option Explicit
Dim objDOM
Dim rtResult
Dim argObj
Dim xmlFile
Set argObj = WScript.Arguments
If 0 < argObj.Count Then
xmlFile = argObj(0)
Set argObj = Nothing
Else
Set argObj = Nothing
WScript.Quit
End If
Set objDom = WScript.CreateObject("MSXML2.DOMDocument.3.0")
objDom.resolveExternals = True
If objDom.load(xmlFile) = True Then
rem WScript.Echo "isResolving is " & CStr(objDom.isResolving)
DispData objDom.childNodes, ""
Else
WScript.Echo "load Error"
End If
Set objDom = Nothing
WScript.Quit
Sub DispData(objNode, header)
Dim obj
For Each obj In objNode
WScript.Echo header & obj.nodeName & " - " & obj.nodeValue
If obj.hasChildNodes = True Then
DispData obj.childNodes, header & " "
End If
Next
End Sub