Userscripts: View Image Links - Security Notices

這篇要講一下, 使用 VIL 在安全上要注意的事項.

如果您有使用到 VIL 的 PicLens 功能或 Download 功能的話, 一定對這個提示視窗不陌生:

因為 PicLens 及 Download 功能, 都有透過 javascript 呼叫 Mozilla 的 XPCOM 元件, 來存取您電腦上的資源, 例如選擇本機目錄或寫入暫存 Media RSS 供 PicLens 讀取等等. 而要呼叫 XPCOM 元件就得先取得 “UniversalXPConnect” 的權限. 例如程式原始碼中可以看到如下片斷:

function browseOutputFolder(){
    unsafeWindow.netscape.security.PrivilegeManager
           .enablePrivilege("UniversalXPConnect");
    const nsIFilePicker = Components.interfaces
           .nsIFilePicker;
    var fp = Components.classes["@mozilla.org/filepicker;1"]
           .createInstance(nsIFilePicker);
    fp.init(window, "Album Output Folder", 
               nsIFilePicker.modeGetFolder);
    var rv = fp.show();
    if (rv == nsIFilePicker.returnOK) {
      _gel('vil_output_path').value = fp.file.path;
    }
}

這段程式會呼叫 XPCOM 中的 filepicker 類別, 讓使用者選擇要存放相簿的目錄. 當程式執行到 PrivilegeManager.enablePrivilege(”UniversalXPConnect”); 這一行時, FireFox 就會出現要求使用允許的對話框了. 可是, 為什麼不可以勾選“記住此決定”呢? 假設我們在看無名相簿時使用了PicLens功能, 如果在確認對話框中有勾選“記住此決定”的話, 系統會把以下幾行存放到 profile 目錄下的 pref.js 中:

user_pref("capability.principal.codebase.p0.granted", "UniversalXPConnect");
user_pref("capability.principal.codebase.p0.id", "http://www.wretch.cc/");
user_pref("capability.principal.codebase.p0.subjectName", "");

事實上, 標紅字的部分應該要是執行 enablePrivilege(”UniversalXPConnect”) 的 script 所在的 Domain URL, 但是由於我們是在 Userscript 中執行的, 因此 FireFox 會以“目前的URL”加入記錄, 也就會變成 “http://www.wretch.cc/”. 如此, 以後如果 wretch.cc 中出現了 enablePrivilege(”UniversalXPConnect”) 呼叫, 就會直接被允許了, 形成安全漏洞.

如果您在使用 VIL + PicLens 時, 曾經勾選過“記住此決定”的話, 那麼先關閉FireFox 之後, 把 <profile>/pref.js 中 “capability.principal.codebase….” 相關的設定刪除後再重開 FireFox 即可. 造成大家不便請多多見諒囉! 近期有空的話我會把 VIL 改寫成 FireFox Extension 的, 請大家再耐心等等吧!

2 Responses to “Userscripts: View Image Links - Security Notices”


  1. 1 鬼臉 Jul 8th, 2008 at 23:8:19 PDT

    請問要在哪把 /pref.js 中的“capability.principal.codebase….”
    刪掉

  1. 1 唬人斯不唬人 » Blog Archive » Userscripts: View Image Links, Now with Download function Pingback on Apr 15th, 2008 at 00:15:07 PDT

Leave a Reply