隨意聊

有別於其他的長文,這裡都是比較隨意寫的短文。原本是發在臉書粉專,但都藏在臉書裡面有點可惜,索性搬一份到部落格來,對不用臉書的人也更友善。

共 105 篇 第 6 / 6 頁 RSS 訂閱

CSS高度動畫新招

如果你問我,HTML、JavaScript 跟 CSS 哪個最難,我大概會回答 CSS,並且送你一張 CSS 拉窗簾.gif。跟 JavaScript 比起來,CSS 進化的速度來得更快,每隔幾個月就出來一個新東西,解決了許多的經典難題。

不過就算沒有這些新東西,其實也能做出一個堪用的版本,或是乾脆直接用 JavaScript 來弄,大部分也都能搞定。但正是因為如此,導致許多人(包括我)的 CSS 知識可能一直都沒有進化,原地踏步,不知道有哪些新的東西。

舉個例子,一個點擊可以展開,再點一次可以收起來的摺疊元件(Collapse)大家應該都不陌生。那如果折疊的時候想加上一點動畫該怎麼弄?沒弄過的人會說這簡單,不就加個 transition: height 0.3s; 就行了嗎?

弄過的人會跟你說這樣沒用,因為 height 是 auto,這種狀況下不會有 transition。要解決的話不外乎就是三招,第一招是寫死固定高度,但通常沒辦法滿足需求;第二招是改成用固定的 max-height,既能動又不會真的讓高度寫死,而缺點是動畫時間會很奇怪;第三招則是請 JavaScript 出馬,在折疊前先把高度取出來再設置上去。

除了廣為人知的這三招以外,最近看到另外兩招新的也可以解決,第一個是 ChatGPT 推薦我用的 grid + grid-template-rows,利用 grid 會自己調整大小但又不是 auto 的特性來做,就能有 transition。

第二個其實才是今天想講的主題,只要在展開時把高度改成 height: calc-size(auto, size); 就搞定了,酷吧。

不過瀏覽器支援度很差,去年九月推出的 Chrome & Edge 129 才開始支援,其他瀏覽器直接死給你看。或許這也是為什麼許多新的 CSS 方法沒有受到這麼多關注吧?就算知道了,可能要先等個半年一年才能等到所有主流瀏覽器的支援,就算到了那時,整體支援率可能還只有 50% 不到,還要再等個三五年才能實際用在 production 上。

但總之呢,能用純 CSS 解決這個千古難題還是挺讚的對吧。

下次碰到需要幫 height: auto 加上 transition 時,如果可以保證使用者的瀏覽器都很新,不妨試試看。

CDN快取去匿名化

有一種攻擊手法叫做「deanonymization」,中文翻作:「去匿名化」,在網路世界中,每個人都保有一定的匿名性,但我們也都知道這層匿名性其實滿容易被打破的。

舉例來說,假設我發了我的 server 連結給 Discord 網友,當他點了之後,我的 server 就會直接收到他的設備傳來的網路請求,假設他沒開 VPN,那我就能拿到他的 IP 跟設備資訊等等,足夠辨識出他人大概是在哪個區域(例如說在台北或是東京之類的)。

但這畢竟也要我的網友主動點擊 URL 才行,而今天要介紹的手法不須要點擊也能做到同樣的事。有個 15 歲的高中生 daniel 前陣子就發表了一篇文章《Unique 0-click deanonymization attack targeting Signal, Discord and hundreds of platform》,分享了他是如何做到的。

Discord 在發送好友邀請的時候,會在手機上彈一個通知出來,這個通知會有加你好友的人的大頭貼照片,讓你方便辨識,十分合理。這時候你可能會想說,那我把 Discord 大頭貼設成自己的 URL 不就行了嗎?抱歉,這樣是行不通的,因為大頭貼只能上傳圖片,最後會被放到 Discord 的 server,前面掛 CDN,所有網址都是 Discord 在管的,這也是滿常見的做法。

然而,就是這個 CDN 開啟了去匿名化之路。

以 Cloudflare 為例,它有許多節點,例如說在東京連到的就是 NRT 節點,會從這邊下載資源,如果這個節點沒有,就會去 source 拉取並且存一份到節點中,別的東京使用者下次去 NRT 節點就拉得到資源了,速度會更快,這就是 CDN 運作的原理。

而 daniel 之前在網路上發現有人分享一個方法,可以透過 Cloudflare 自己的服務 Cloudflare Workers,強制把請求發送給某個特定 CDN 節點。

這是什麼意思呢?

對於某個特定資源 huli_avatar.png,我可以用這個方式,發請求給所有 Cloudflare 的 CDN 節點,並且透過 response header,來得知這個節點的快取狀況,我能知道是 HIT 還是 MISS,也能知道快取還多久會過期。

也就是說,當我發送 Discord 好友邀請給小明的時候,小明手機自動跳通知,去最近的 CDN 節點抓取圖片。接著,我利用剛剛講的方法,發送請求給所有節點,只要查看 response header,就能知道小明剛剛訪問的是哪個節點,進而推測出小明大概的位置。

簡單來說就是利用 CDN 快取機制來 leak 出使用者的大概位置,也算是一種 side-channel attack 了。

Signal 跟 Discord 都能用類似手法進行攻擊,不過這兩個聊天軟體都不認為這是個需要修的漏洞(我也不認為就是了),而 Cloudflare 最後修了那個可以透過 worker 發送請求到任意節點的問題。

我的想法是,這個手法有趣歸有趣,但是對那些聊天軟體來說,似乎確實超過了職責所在,畢竟就算不是透過這種方法,發 URL 點擊也還是能達到一樣的效果,而且更精準。況且這就是 CDN 的運作機制,要修的話也不知從何修起,成本滿高的。

分享這篇是因為故事很有趣,而且很完整,原文裡面有附各種圖片還有完整的 exploit 影片,推薦有興趣的人去看看原文。

影片:https://gist.github.com/hackermondev/45a3cdfa52246f1d1201c1e8cdef6117

DeepSeek資料庫裸奔

今天來分享一個過年時的舊聞,應該不少人看過了,就是 DeepSeek 的資料庫在網路上裸奔被發現的故事。

資安公司 Wiz 的研究團隊在 1/30 的時候發佈了一篇名為《Wiz Research Uncovers Exposed DeepSeek Database Leaking Sensitive Information, Including Chat History》的文章,揭露了整段故事的細節。

基本上要入侵的第一步叫做 reconnaissance,簡稱 recon,偵查的意思,從外部的角度去搜集各種資訊,最常見的就是去找出 subdomains 或是 Google Dorking 等等,先把公開的資源搜集一波,再決定下一步。

當找到 subdomain 以後,先掃一次 port,看一下有哪些有趣的發現,接著再繼續打。

而這次 DeepSeek 的漏洞是在掃 port 這邊就被找到了,簡單來說先掃到一個 subdomain: dev[dot]deepseek[dot].com,掃 port 發現上面開著 8123 port,結果一連進去就是一個公開的 ClickHouse,可以直接下 SQL query 並顯示結果。

整個過程就是這樣,一個裸奔的 ClickHouse 放在網路上,就算沒有被這間資安公司找到,可能過不久就被其他機器人掃到了。完全不需要驗證又直接開放在公網,暴露的又是資料庫,算是滿嚴重的。

補充文章:https://www.ithome.com.tw/news/155392

工程師求職詐騙案例

分享一個在推特上看到的,台灣工程師被詐騙結果 Metamask 裡的加密貨幣全都被偷走的血淋淋案例

攻擊者在 Linkedin 上主動發起社交攻擊,説已經有個 MVP 在找人繼續開發產品,提供了一個 repo,結果 repo 裡面有些隱藏的惡意程式碼,跑起來之後跳出要求權限的視窗。

雖然一開始按了拒絕,但因為一直跳,事主想說應該是其他現有的 App 在要的,就按了同意,接著過不久後發現自己 Metamask 錢包中的加密貨幣被洗劫一空,損失 4 萬美金。

留言裡的原文有詳細的攻擊手法、過程跟事後檢討,這種精心設計的社交工程在幣圈似乎也屢見不鮮了,不管你是工程師還是其他角色,都有可能被騙到,而且越來越精緻,看起來越來越像真的。

分享這些案例也是希望能引起大家的警覺心,之後碰到類似狀況時至少能突然想起這些案例,立刻就覺得這好像有點問題

補充文章:https://dawson54068.medium.com/%E6%8E%89%E4%BA%86%E4%B8%80%E5%8F%B0%E9%80%B2%E5%8F%A3%E8%BB%8A%E7%9A%84%E6%95%85%E4%BA%8B-609421ca2e09?sk=7cb053a2b19bb5671ad5ba5fa8358c6d

Discord V8漏洞影片

年前其實本來就想分享一個很猛的影片,但不知不覺就拖到年後了 😆

強者我朋友最近開了一個講資安的 YouTube 頻道,今天要介紹的這一支影片叫做:「Hacking Discord for $5000 Bounty」

在影片中完整解釋了整串的攻擊鏈,包含​了從 XSS 打進 Electron,而且是利用了舊版 Chromium 的 n-day,直接串成 RCE。雖然說這個漏洞有一陣子了(2021 年),但現在回顧還是很好看。

這部影片花了大量的篇幅與時間在介紹 V8 的機制跟 exploit,這是相當精彩的部分,之前我看文章也沒看到這麼詳細的解說,內容包括 ignition 跟 turbofan 是怎麼運作的,以及這個 n-day 的成因是什麼,patch 又是什麼。

最後則是講到 V8 的 memory layout、儲存東西的機制,並且從簡單的 OOB access 串到完整的任意讀寫,再串到最後的 RCE。

對於想了解 browser security 或是 V8 如何運作的人來說,絕對是個不可錯過的影片,真心推薦。