![]()
近日,安全研究員 Ammar Askar 公開了一條利用 VSCode 漏洞一鍵竊取 GitHub Token 的完整攻擊鏈。攻擊者無需密碼、無需下載惡意程序,只要誘導用戶打開一個特制鏈接,就有機會獲取 GitHub Token,并獲得對私有倉庫的讀寫權限。
更具爭議的是,在披露漏洞的同時,Askar 還公開炮轟微軟安全響應中心(MSRC),稱其長期低估 VS Code 安全問題,甚至曾在未給予任何致謝的情況下悄悄修復其提交的漏洞。因此,這一次他直接放出了完整 PoC 和利用細節。
來源:https://blog.ammaraskar.com/github-token-stealing/-vscode-did-well
作者 | Ammar Askar 責編 | 蘇宓
出品 | CSDN(ID:CSDNnews)
![]()
背景
你可能不知道,GitHub 其實有一個很方便的功能,叫做 github.dev。
在你有權限訪問的任意代碼倉庫中,只要把網址從 github.com 改成 github.dev,或者點擊文件頁面里的一個下拉入口(在 GitHub 文件瀏覽界面中選擇“在 github.dev 中打開”的菜單項):
![]()
你就會進入一個輕量版的 VS Code,它完全運行在瀏覽器中。(某種程度上,這也算是 Electron 架構帶來的延伸能力)
![]()
這個網頁版 VS Code 功能相當完整:你可以瀏覽倉庫中的所有文件(包括私有倉庫),還可以發起 Pull Request,甚至直接提交代碼。
它之所以能做到這些,是因為 github.com 會通過 POST 請求將一個 OAuth token 傳遞給 github.dev,用來代表你與 GitHub 進行交互。需要注意的是,這個 token 并不是僅限于當前訪問的倉庫,而是覆蓋你有權限訪問的所有倉庫。
正因為這個 token 的存在,再加上整個 web 端幾乎運行了 VS Code 那套規模龐大的 TypeScript 代碼庫,使得它天然成為安全研究人員和漏洞挖掘者重點關注的目標。
接下來要討論的,就是這樣一種 VS Code 相關漏洞,攻擊者可以利用它來竊取你的 GitHub token。
開發者“神裝”補給站|CSDN 讀者專屬福利
無套路領取 1 00 小時 GPU 算力
瑞幸咖啡/肯德基早餐/麥當勞套餐/下午茶等能量套餐任選其一
入群還可每月定期抽取旗艦顯卡、AI PC 等極客神裝
領取地址:https://s.csdn.cn/4nPsOp
![]()
VS Code Webview 安全模型
作為一款桌面版 Electron 應用,如果能夠在 VSCode 中執行任意 JavaScript 代碼,本質上就等同于獲得遠程代碼執行能力。因此 VS Code 引入了多種沙箱機制,其中我們這里重點關注的是 VSCode 的 webview。
Webview 通過使用一個與主 VS Code 窗口不同源的 來實現隔離,從而確保其中執行的任何 JavaScript 都被嚴格限制在沙箱環境內。這類 webview 通常用于 Markdown 預覽或 Jupyter Notebook 編輯等功能:
![]()
在 Jupyter Notebook 中通過 iframe 渲染 HTML 輸出
單元格的輸出會被渲染到一個來自 vscode-webview://... 源的 中,而不是主 Electron 窗口的 vscode-file://... 源中。</span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>這意味著,即使 Jupyter Notebook 支持 HTML 展示或通過 JavaScript 實現交互式組件,這些代碼也無法影響 VS Code 核心應用本身。也就是說,不能在這個 iframe 中調用 Node.js 的 Electron API,也無法直接訪問 VS Code 的內部 API。</span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>很好,這樣我們就獲得了“內容渲染能力”,但如果只是靜態內容就太無聊了。那 VS Code 是如何實現一些交互功能的,比如 Markdown 預覽中高亮當前編輯行,或者在編輯時實時同步預覽內容?</span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;text-align: center;"><span><span><img src="https://mmbiz.qpic.cn/mmbiz_png/S1iaf4GgGjExiczicz5bzw0RVcDhQRYLvSaoyiaiavDvQKGuG9CesoGiaHDYuLoWOfHrJWImqoZIiaAPsKSYCk8LFtxCaDCurkmQ24EhBBQNyfPgQ0/640?wx_fmt=png&from=appmsg" alt="Markdown 預覽顯示相應的源代碼行" data-ratio="0.31296296296296294" data-type="png" data-w="1080" data-imgfileid="100347983" data-aistatus="1"></span></span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;text-align: center;"><span><span>Markdown 預覽中展示對應源碼行的高亮效果</span></span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>同源策略雖然提供了安全性,但也導致主編輯器窗口無法直接訪問 vscode-webview://... 這個 iframe 中的 DOM。畢竟,如果 <iframe src="google.com"> 允許外部頁面直接操作 Google 頁面 DOM,那就可以竊取 cookie 或篡改頁面行為,這顯然是不能接受的。</span></p> <p> <ul> <li></li> <li></li> <li></li> </ul> <pre data-lang="javascript"><code><span><span>document</span>.<span>getElementsByTagName</span>(<span>'iframe'</span>)[<span>0</span>].<span>contentWindow</span>.<span>findElementById</span>(<span>'foo'</span>)</span></code><code><span><span>Uncaught</span> <span>SecurityError</span>: <span>Failed</span> to read a named property <span>'findElementById'</span> <span>from</span> <span>'Window'</span>: </span></code><code><span><span>Blocked</span> a frame <span>with</span> origin <span>"vscode-file://vscode-app"</span> <span>from</span> accessing a cross-origin frame.</span></code></pre> </p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>要實現跨頁面交互,唯一的方式是讓兩個不同源頁面通過 Window.postMessage() API 進行通信。該方法允許在不同 window 之間傳遞 JavaScript 對象。因此,在“Markdown 高亮對應編輯器行”的場景中,主編輯器窗口會發送類似這樣的消息:</span></p> <p> <ul> <li></li> <li></li> <li></li> <li></li> </ul> <pre data-lang="bash"><code><span>{</span></code><code><span> <span>type</span>: <span>"onDidChangeTextEditorSelection"</span>,</span></code><code><span> line: 31</span></code><code><span>}</span></code></pre> </p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>而 webview 內部則會監聽這些消息,并根據內容更新 UI 高亮:</span></p> <p> <ul> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> </ul> <pre data-lang="cs"><code><span>window.addEventListener(<span>'message'</span>, <span>async</span> <span>event</span> => {</span></code><code><span> <span>const</span> data = <span>event</span>.data <span>as</span> ToWebviewMessage.Type;</span></code><code><span> <span>switch</span> (data.type) {</span></code><code><span> ...</span></code><code><span> <span>case</span> <span>'onDidChangeTextEditorSelection'</span>:</span></code><code><span> marker.onDidChangeTextEditorSelection(data.line, documentVersion);</span></code><code><span> <span>return</span>;</span></code></pre> </p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span><span>注:VS Code 瀏覽器版本也采用了類似的沙箱設計模型。VS Code 開發者 Matt Bierner 曾寫過一篇博客(</span></span><span><span>https://blog.mattbierner.com/vscode-webview-web-learnings/</span></span><span><span>),詳細介紹了從 Electron 遷移到 Web 端過程中遇到的各種挑戰,值得一看。</span></span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span><span>Bug</span></span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>從結構上看,webview 的安全邊界大致是這樣的:</span></p> <p> <img src="https://mmbiz.qpic.cn/mmbiz_png/S1iaf4GgGjEwN9klibkLgbhvDk6042TWZQmogep4S2wHibbrE7vM1F0Valu5w2lP0HUwNYgSx0KbDpft3tmbqx2YAL8JdLia2c6Pc4x45vtlwAI/640?wx_fmt=png&from=appmsg" data-ratio="0.72" data-s="300,640" data-type="png" data-w="425" type="block" data-imgfileid="100348005" data-aistatus="1"> </p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;text-align: center;"><span><span>Webview security boundary</span></span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>但從用戶界面角度來看,webview 又是直接嵌入在窗口中的一部分。用戶會自然期待一些基礎操作能夠正常工作,比如點擊鏈接、拖拽,或者按下 Ctrl+F 搜索等:</span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;text-align: center;"><span><img src="https://mmbiz.qpic.cn/mmbiz_png/S1iaf4GgGjExXq1ZbRdFE274qvgoHficA1hkaCDMHPFkHcld6uZSuxPcib5lqFeia4azcXyZkEls5WUjUEial7Yew18p2wZUjsrx0WWuj7kl1o2M/640?wx_fmt=png&from=appmsg" data-ratio="0.7517241379310344" data-s="300,640" data-type="png" data-w="725" type="block" data-imgfileid="100348006" data-aistatus="1"></span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;text-align: center;"><span><span>Webviews 在 VS Code 界面中的位置</span></span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>因此,VS Code 需要通過消息機制實現大量基礎功能來“補齊體驗”。而一提到鍵盤快捷鍵,熟悉 <iframe> 安全模型的人可能已經開始意識到問題所在。</span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>在跨域環境中,瀏覽器提供了相當嚴格的隔離機制。如果你在 hackerman.com 頁面中嵌入一個 google.com/login 的 iframe,你絕不希望外部頁面能夠在 iframe 上掛載鍵盤監聽器,從而捕獲用戶在 Google 登錄框中的輸入,這會直接導致密碼泄露。</span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>好了,理解這一點之后,可以嘗試在 VS Code webview 中點擊一下,然后按下 Ctrl+Shift+P 打開命令面板。</span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;text-align: center;"><span><span><img src="https://mmbiz.qpic.cn/mmbiz_png/S1iaf4GgGjEyyy0eTiarJAY4ickNspymKYtmQKbfLnkzQ0Grj3semKK0oCKLy4BSiaxA6W2Bj1ltmnicbto8TF7E2KxYlFmdice4iaicQ33MD1tx1IA/640?wx_fmt=png&from=appmsg" alt="VSCode 命令面板" data-ratio="0.3490740740740741" data-type="png" data-w="1080" data-imgfileid="100347987" data-aistatus="1"></span></span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;text-align: center;"><span><span>VS Code 命令面板</span></span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>嗯……居然是可以的。等等。情況有點不對。</span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>為了避免“用戶點進 webview 后快捷鍵全部失效”的糟糕體驗,VS Code 在默認 webview 消息處理機制中加入了一個事件:did-keydown。當 webview 加載時,會在內部注冊如下邏輯:</span></p> <p> <ul> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> <li></li> </ul> <pre data-lang="php"><code><span>contentWindow.<span>addEventListener</span>(<span>'keydown'</span>, handleInnerKeydown);</span></code><code><span><span>/**</span></span></code><code><span> * <span>@param</span> {KeyboardEvent} e</span></code><code><span> */</span></code><code><span><span>const</span> <span>handleInnerKeydown </span>= (e) => {</span></code><code><span> hostMessaging.<span>postMessage</span>(<span>'did-keydown'</span>, {</span></code><code><span> <span>key</span>: e.key,</span></code><code><span> <span>keyCode</span>: e.keyCode,</span></code><code><span> <span>code</span>: e.code,</span></code><code><span> <span>shiftKey</span>: e.shiftKey,</span></code><code><span> <span>altKey</span>: e.altKey,</span></code><code><span> <span>ctrlKey</span>: e.ctrlKey,</span></code><code><span> <span>metaKey</span>: e.metaKey,</span></code><code><span> <span>repeat</span>: e.repeat</span></code><code><span> });</span></code><code><span>};</span></code></pre> </p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>也就是說,webview 會把鍵盤事件“上報”給主 VS Code 窗口,讓主窗口像處理真實用戶輸入一樣處理這些事件。</span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>看起來很方便,但問題也隨之出現:這意味著運行在不可信 webview 中的腳本,也可以偽造這些鍵盤事件。</span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>換句話說,它可以假裝自己是用戶,從而觸發各種快捷鍵行為。</span></p> <pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>例如打開命令面板,然后執行危險操作,比如安裝攻擊者控制的擴展。理論上,只需要模擬下面這串按鍵:</span></p> <ul> <li><pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>Ctrl+Shift+P </span></p></li> <li><pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>developer: install extension from location </span></p></li> <li><pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span>Enter </span></p></li> <li><pHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;background-color: rgb(255, 255, 255);line-height: 1.75em;letter-spacing: 1px;"><span></span></span></p> <h1PingFang SC", -apple-system-font, system-ui, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;line-height: 1.5;letter-spacing: 1px;visibility: visible;"><span><spanPingFang SC", system-ui, -apple-system, "system-ui", "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;visibility: visible;line-height: 1.5;display: inline !important;"></span></span></h1> <h1PingFang SC", -apple-system-font, system-ui, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;line-height: 1.5;letter-spacing: 1px;visibility: visible;"><span><spanPingFang SC", system-ui, -apple-system, "system-ui", "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;font-size: 17px;font-style: normal;font-variant-ligatures: normal;font-variant-caps: normal;letter-spacing: 0.544px;orphans: 2;text-align: justify;text-indent: 0px;text-transform: none;widows: 2;word-spacing: 0px;-webkit-text-stroke-width: 0px;background-color: rgb(255, 255, 255);text-decoration-thickness: initial;text-decoration-style: initial;text-decoration-color: initial;visibility: visible;line-height: 1.5;display: inline !important;"></span></span></h1> <p> <strong><span><spanHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1px;font-size: 15px;"><span> 開發者“神裝”補給站|CSDN 讀者專屬福利</span></span></span></strong> </p> <p> <span><spanHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1px;font-size: 15px;"><span>不論你是想跑通最新的本地 LLM,還是想實測一套 Agent 自動化工作流,算力與補給,我們都為你備齊了!</span></span></span> </p> <p> <span><spanHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1px;font-size: 15px;"><span>立領三重進階大禮:</span></span></span> </p> <p> <span><spanHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1px;font-size: 15px;"><span>注冊即領 100 小時云端算力券</span></span></span> </p> <p> <span><spanHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1px;font-size: 15px;"><span>瑞幸咖啡/肯德基早餐/麥當勞套餐/下午茶任選其一</span></span></span> </p> <p> <span><spanHelvetica Neue", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1px;font-size: 15px;"><span> 掃碼即刻領取,今日額度有限,手慢無!</span></span></span> </p> <p><span><img src="http://dingyue.ws.126.net/2026/0603/dfbc0062j00tg1qlz00a6d200lu00log00lu00lo.jpg" data-ratio="0.9923664122137404" data-s="300,640" data-type="png" data-w="786" data-imgfileid="100347974" data-aistatus="1"></span></p> <p><spanPingFang SC", -apple-system-font, system-ui, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1px;"><br></span></p> <p><spanPingFang SC", -apple-system-font, system-ui, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1px;"><span>領取地址:</span></span><spanPingFang SC", -apple-system-font, system-ui, "Helvetica Neue", "Hiragino Sans GB", "Microsoft YaHei UI", "Microsoft YaHei", Arial, sans-serif;letter-spacing: 1px;"><span>https://s.csdn.cn/4nPsOp</span></span></p> <p> <mp-style-type data-value="3"></mp-style-type></p> </div> </body> </html></p></p></body></html>
特別聲明:以上內容(如有圖片或視頻亦包括在內)為自媒體平臺“網易號”用戶上傳并發布,本平臺僅提供信息存儲服務。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.