MySQL 的協定在設計上有瑕疵,導致了一些安全性問題。
這篇算是個翻譯兼摘要文,
今天看到原文覺得有趣就追了一下,
原文在此:MySQL client allows MySQL server to request any local file
TL;DR
MySQL 協定上的瑕疵
預設讓 Server 可以讀取 Client 上有讀取權限的所有資料
導致有心人士可以寫一個加了點料的 MySQL server
當你連上它的時候你的東西就被它看光光了
- 原因:mysql-client 的
LOAD DATA LOCAL
預設是 Enable - 解法:記得改成 Disable
- 官方文件:https://dev.mysql.com/doc/refman/8.0/en/load-data-local.html
目前據報 mysql-client 8.0 預設沒這問題,因為 LOAD DATA LOCAL
預設是 Disable 的。但 5.5, 5.6, 5.7 預設都是 Enable 的。
有些 ORM framework 預設是有幫忙 Disable LOAD DATA LOCAL
的,但不是每個都有,開發者要注意一下。
玩法
-
攻擊執行了 Adminer 的網站
- 黑帽架一個 Evil MySQL Server
- 找到某個網站公開的
adminer.php
- 讓 Adminer 去連接黑帽架設的 Evil MySQL Server
- Adminer 預設沒 Disable
LOAD DATA LOCAL
- Adminer 其中一個功能就是讓你可以連接外部的 MySQL Server
- Adminer 預設沒 Disable
- 黑帽就可以開心的讀取到你伺服器上的各種資料了
- 原作者的另一篇文章有詳細講 Adminer 被攻擊的步驟
- Adminer 升級到 4.7.0 可以避免掉這個問題
-
Honeypot
- 架個公開的 Evil MySQL Server
- 嘗試讀取上鉤的攻擊者的檔案
- 如果他用來連線的 mysql-client 也沒把
LOAD DATA LOCAL
關掉就會中招。
- 如果他用來連線的 mysql-client 也沒把
相關討論
可能會有後續發展可以追
- https://mobile.twitter.com/gwillem/status/1086275952915533828
- MySQL client allows MySQL server to request any local file by default : programming
- 結果後來原作者得知有其他人在去年 8 月就寫了一樣的東西了,而且還有精美的圖文 writeup。
References
Share
Donation
如果覺得這篇文章對你有幫助, 除了留言讓我知道外, 或許也可以考慮請我喝杯咖啡, 不論金額多寡我都會非常感激且能鼓勵我繼續寫出對你有幫助的文章。
If this blog post happens to be helpful to you, besides of leaving a reply, you may consider buy me a cup of coffee to support me. It would help me write more articles helpful to you in the future and I would really appreciate it.