XXEとActiveScript


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)

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

戻る

XXE基本編へ戻る