PHPMailer 安全性問題對 CMS 的影響,你該了解的事
- English
- 繁體中文
12 月 26 當天,The Hacker News[1] 報導 PHPMailer 有個遠端執行程式碼的漏洞,可以透過不乾淨的寄件者 Email 位置攻擊,植入遠端程式碼。隔一天日本的 ITmedia[2] 即報導了這件事情, IThome[3] 也在三天後有此報導(似乎有點慢了)。Drupal 官方甚至破例為此發佈公開資訊[4],這是自 2011 年宣告不再為第三方函式庫發出安全性警告後的唯一例外。很快的,也有開發者在 GitHub 建立了 Docker 程式[5] ,幫助我們了解並實作此弱點。
在前面所提到的報導中,都特別警告了三個主流的 CMS 系統可能受到此弱點影響,其中也包含 Drupal,但是實際上有沒有立即性的影響?如何影響?身為 CMS 的開發商,我們也非常重視這個議題,因此收集了許多資料,並查閱了相關原始碼,希望能幫助所有客戶及讀者進一步的了解這些問題。
Drupal 核心未使用 PHPMailer 函式庫,相關模組也無實質影響
在 Drupal.org 官方公告說明裡,明確表示 Drupal 本身並未受到此弱點影響,除非使用者在系統中直接使用 PHPMailer 函式庫,這是由於 Drupal 並未內建 PHPMailer ,通常使用預設的 PHP mail() 指令。那究竟什麼情況會導致使用 PHPMailer 呢?常見的狀況有二:
- 使用 PHPMailer 模組[6],這是 Drupal 第三方模組,用來介接 Drupal 與 PHPMailer,讓 Drupal 改用 PHPMailer 函式庫寄送信件。(為了區別 PHPMailer 函式庫,以下統一用 PHPMailer 模組以便跟 PHPMailer 函式庫做區隔。)
- 使用 SMTP Authentication Support[7] 模組,另一個常用的 SMTP 寄信模組,這個模組本身夾帶了源自 PHPMailer 並經過改寫的函式庫。
SMTP 模組使用修改過的 PHPMailer 函式庫中不存在此次 PHPMailer 所帶來的弱點問題。在 Drupal.org 官方的公告特別解釋 SMTP 模組近期所公告的安全性修正,與 PHPMailer 錯誤是不相關的。
而 PHPMailer 模組在程式碼當中遵循 RFC 5322 的網址與 Email 格式規範[8],在寄送信件之前,會使用 regex 做信件地址格式檢查[9],以確保送出的地址格式正確,避免了遠端執行程式攻擊的問題。
如果您仍然是 Drupal 6 的使用者或維護人員,並且僅使用 PHPMailer 函式庫的 SMTP 寄件功能,由於 Drupal 6 所使用的 PHPMailer 模組所使用的第三方 PHPMailer 函式庫為 5.1 或更久之前的版本,因此可參考 David Snopek 撰文[10] 所建議的做法,將有問題的 Sendmail() 、 MailSend() 等程式碼禁用或刪除。
其他 CMS 影響狀況
在本文開始提到的幾個新聞中,都提到了三個主要的 CMS 系統,除了 Drupal 外,還包含了 Joomla 與 Wordpress。我們追查了這兩個系統的原始碼,相較於 Drupal 未直接於核心納入 PHPMailer 函式庫,Joomla[11] 與 Wordpress[12] 確實都分別在其核心程式碼內,直接使用了 PHPMailer 函式庫。
然而使用者依然沒有立即性的危險,Joomla 的官方公告[13] 明確告知,在使用信件地址時,本身也做過驗證,確認地址的正確性,而 Joomla 也將會在 3.7 版推出時,一併更新 PHPMailer 函式庫,現階段不需要立即採取任何修正措施。
Wordpress 雖然沒有查到任何正式的官方公告,但官方已在最快時間為核心程式作出相應的修正[14]。Mark Maunder 的文章[15] 中談到此問題也提到,如果沒有自行開發的外掛或版型有直接使用到 PHPMailer 函式庫,便毋須緊張。
CMS & 開源程式碼 & 安全性
被點名的三家 CMS,都是屬於開源程式碼,背後都有著廣大的社群開發者,也不乏提供專業服務公司所貢獻的程式碼與工具。居於龍頭的平台,當然容易在安全性問題發生時,成為被鎖定的目標。但是之所以能夠成為主流頂尖的平台,也是因為有為數眾多的使用者,以及專業開發服務公司的支持與貢獻。正因為如此,這些網站開發架構程式在開發時,已經懂得在整合多方工具與服務的同時,早一步做好安全性的防範。透過開源程式碼的精神,每一個開發者都有機會在問題出現的時候提出修正,而其他使用者與開發人員也能因此得益。
持續維護與時俱進
開源的程式碼,並且廣為使用,這樣的 CMS 框架難免成為一把對安全性來說的雙面刃。
但是只要善於維護,與開發者或您的網站服務提供廠商合作,網站的安全性也能及時得到加強,免於受到攻擊的威脅。
參考資料
- The Hacker News: http://thehackernews.com/2016/12/phpmailer-security.html
- ITmedia News: http://www.itmedia.co.jp/enterprise/articles/1612/27/news058.html
- IThome News: http://www.ithome.com.tw/news/110692
- Drupal Public service announcement: https://www.drupal.org/psa-2016-004
- Docker for 5.2.18 exploit: https://github.com/opsxcq/exploit-CVE-2016-10033
- PHPMailer (Drupal contrib module): https://drupal.org/project/phpmailer
- SMTP Authentication Support (Drupal contrib module): https://www.drupal.org/project/smtp
- Internet Message Format (RFC 5322): https://tools.ietf.org/html/rfc5322#section-3.4
- Address parser function in Drupal PHPMailer module: http://cgit.drupalcode.org/phpmailer/tree/phpmailer.module?id=4520ecc#n103
- Drupal 6 fixes of PHPMailer module: https://www.mydropwizard.com/blog/drupal-6-workaround-highly-critical-vulnerability-phpmailer
- Joomla security announcement: https://developer.joomla.org/security-centre/668-20161205-phpmailer-security-advisory.html
- PHPMailer class in wp-includes: https://github.com/WordPress/WordPress/blob/master/wp-includes/class-phpmailer.php
- PHPMailer code in Joomla vendor: https://github.com/joomla/joomla-cms/tree/91749f845dcf20e097801ecd75da8e4665075a18/libraries/vendor/phpmailer/phpmailer
- Update PHPMailer in WP core: https://core.trac.wordpress.org/ticket/39397
- PHPMailer affects WP core: https://www.wordfence.com/blog/2016/12/phpmailer-vulnerability/