手帶 app 有幾安全?
2020-03-26
簡述:給不是IT人的你
香港政府的手帶 App 可能因「貪方便」而使用了一個名為 Humayan Kabir
的孟加拉開發者的程式碼,所以現在全香港《居安抗疫》資料,都掌握在這位外國勢力手上。甚至乎明天他加上要求大家輸入信用卡資料的空格,也是絕對可行的。
此乃屬於嚴重安全漏洞。在政府未修正這問題之前,盡可能不要在此程式中輸入任何敏感的個人資料。
如果你有興趣知道更多這漏洞的原理,請繼續往下閱讀。
今早,筆者發現監察手帶 app 《居安抗疫》的下載頁問題之後,想起有網民表示連遞交表格都不成功,於是就嘗試下載這個《居安抗疫》程式的 Android 版,把它 decompile (反向編譯),看一看箇中問題,希望為 OGCIO (政府資訊科技總監辦公室) 找一些 bugs,然後讓有手帶的人成功遞交表格,怎料卻發現嚴重漏洞。
先發現一個網頁表格
原本只是找一找遞交表格的伺服器 Endpoint,看看會不會有些 Error Code 能找到端倪。怎料在 RegisterInfoActivity.java
這個 Android 畫面上(Android 中所有用戶能看到的畫面都稱為 Activity),看到有一個類似 WebView 的東西,應該是當用戶掃描 QR Code 後,便會引導到一個網頁中繼續填寫資料。
WebView webView = this.f2688t; String a = C0881b.m2198a(this); List<String> list2 = this.f2693y; StringBuilder sb = new StringBuilder(); boolean z = false; for (String str : list2) { if (z) { sb.append("||"); } sb.append(str); z = true; } C2231a aVar2 = new C2231a(); aVar2.mo5010c("https"); aVar2.mo5009b("eqapp1.hqss.ogcio.gov.hk"); String str2 = "/shs/www/equar/index"; int i = 0; while (true) { int a2 = C2124e.m4129a(str2, i, 20, "/\\"); int i2 = a2; aVar2.mo5008a(str2, i, a2, a2 < 20, false); i = i2 + 1; if (i > 20) { break; } } aVar2.mo5006a("www_header_token", "ODk1MGQwNzkyZmIxM2Q4MjI0ZjQxY2U4"); aVar2.mo5006a("lang", a); aVar2.mo5006a("user_sn", sb.toString()); aVar2.mo5006a("info.family", String.valueOf(list2.size())); webView.loadUrl(aVar2.mo5007a().f6202i);
發現網頁表格的問題
在手機 app 中使用網頁來讓用戶填寫資料本來沒有什麼問題,還節省了開發成本,讓 iOS 和 Android 兩個平台都能夠使用得到。不過當我們打開這個網頁時,便發現有一個很嚴重的問題,以下為網頁的部份原始碼:
<script src="https://technext.github.io/drug/js/vendor/modernizr-3.5.0.min.js"></script> <script src="https://technext.github.io/drug/js/vendor/jquery-1.12.4.min.js"></script> <!--script(src='https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.1/esm/popper.js')--> <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script> <!--script(src='https://technext.github.io/drug/js/isotope.pkgd.min.js')--> <script src="https://technext.github.io/drug/js/ajax-form.js"></script> <script src="https://technext.github.io/drug/js/waypoints.min.js"></script>
這部份是一些加入其他網站 JavaScript 的 HTML。在一般情況下,我們會使用其他開發者所創立的組件 (Framework/Library),減省我們自己開發的時間。不過,由於很多任何人都能夠公布組件,我們永遠不知道有沒有不懷好意的開發者,在他們的 JavaScript 中放入惡意代碼,所以我們使用任何人的組件時,必須選擇有信譽和來源可靠的組件。
而這個 app 用的是什麼組件呢?驟眼一看,modernizr、jquery、bootstrap 都是常見的工具,很多網站都有使用。
不過,部份工具的來源,卻是來自一個叫 technext.github.io 的網站,這個網站是誰控制的呢?是不是政府擁用的?
所有 github.io 其實都是由著名網站 Github 提供的免費寄存服務,我們可以輕易把網址改一改動,就知道這個寄存空間的擁用人是誰,只要把 github.io 前置的名字,改為 https://github.com/名字
就能找到。於是,我們一起來看看 https://github.com/technext
到底是何許人:
竟然是一位名為 Humayun kabir 的孟加拉開發者。
有可能發生的安全漏洞
如果這個 technext.github.io 的擁用權是在政府手上,其實問題不大。不過,我相信以 Humayun kabir 為名的開發者帳戶,理應不受政府控制。而該網站存放的 modernizr、jquery,可以無需通知 OCGIO的情況下,任何修改,甚至加入惡意程式碼!
這是十分典型的 Cross-site Scripting Attack:
圖片來源:https://www.imperva.com/learn/application-security/cross-site-scripting-xss-attacks/
根據著名網絡公司 Mozilla 的安全評級,以上的 Cross-site Scripting 屬於最高級別的「嚴重級」。
換句話說:如果 Humayun kabir 得知自己的工具被香港政府使用,然後偷偷地加入新的代碼,背後偷取手帶人士的個人資料,或者甚至在表格上加上一兩個詢問個人資料的空格,再繞過政府自行收集,是絕對可行的。
而在用戶使用的途中,是完全不會察覺,亦不會知道這個表格有沒有連接上政府以外的其他伺服器!
這開發者未必知情
倘若政府是聘請了這位孟加拉開發者,使用他寄放的工具,或許政府與他之間有些協議,可能還是對用家有一點點保障。
不過,我們再細心一看原本使用這工具來源的網站: http://technext.github.io/drug
這網站顯然是一個平常不過的 template 網站,應該是普遍用來方便開發者架設網站的樣版。有很可能是開發《居安抗疫》的公司同事,為圖方便起見,直接使用了 template 網站的工具來開發。
建議解決方法
其實,modernizr、jquery、bootstrap 這三個工具都是四處可以找到其他可靠的來源下載,倘若能放在 OCGIO 的伺服器之上,根本就可以簡單消除這漏洞。
而其中一個 ajax-form.js
,這個很可能是 app 開發者最希望使用到的工具,而其他的工具就正是因為這個 ajax-form.js
需要用到,才一併加入。我們發現 ajax-form.js
只是一個不多於 50 行的 Contact Form 聯絡我們輔助代碼,如果是直接抄過來《居安抗疫》,可能有版權問題,但 50 行的代碼,由開發者親自操刀也不是難事。
結語
希望政府盡快更新有關網站表格,由於表格不是依附在 app 之中,照道理無需經過 App Store 和 Play Store 審查已經可以直接更新,並更新有關網絡安全的要求,好讓香港的科技發展不會淪為別國的笑柄。
Comments
Read More
HTTP:互聯網的共同語言
2019-02-25
互聯網的共同**人類**語言是甚麼呢?答案是英文,根據[維基百科](https://en.wikipedia.org/wiki/Languages_used_on_the_Internet),世界上有五成四的網站都是以英文寫成,另外的四成六則以其他世界各地的語言寫成,所以說互聯網上的用家(即是各位)主要使用英文溝通也不為過。可是大家細想一下,互聯網上的電腦,又是怎樣互相溝通的呢?當你鍵入 `https://www.google.com`,為何遠在千里之外的Google伺服器,能夠與你桌上的手提電腦裏的Google Chrome溝通呢?這一切,要由互聯網誕生之初講起。
軟件工程師成長手冊
2019-04-29
筆者經常都强調軟件工程師有高下之分,不論技術或是解難能力都可以隨時日改善,亦曾大力鞭撻專家級初學者的無知,對軟件開發造成破壞。 初出茅蘆的軟件工程師及編程初學者想要改善自己技術,在茁壯成長的話,對自己技術層面有一個準確評價是至關重要,以免墮入「識少少,扮代表」的認知偏差。
為家人添置多一個新聞選擇 —— 利用 Raspberry Pi 接駁 NowTV 新聞台上電視
2019-11-11
為家人添置多一個新聞選擇 —— 利用 Raspberry Pi 接駁 NowTV 新聞台上電視
常見的 Bootstrap 新手中伏位:從手帶 app (居安抗疫) 下載頁一齊睇
2020-03-26
筆者一看到居安抗疫這個網站就覺得排位怪怪的,打開後發現,充滿著常見的 Bootstrap 新手中伏位!讓我們一起來看一看!