<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>万屋猫Labs</title><link>https://yn-labs.com/</link><description>Recent content on 万屋猫Labs</description><generator>Hugo</generator><language>ja</language><lastBuildDate>Sun, 05 Apr 2026 00:00:00 +0900</lastBuildDate><atom:link href="https://yn-labs.com/index.xml" rel="self" type="application/rss+xml"/><item><title>Docker Desktopが重いからWSL2でLazyDockerに移行してみた</title><link>https://yn-labs.com/posts/lazydocker-wsl2-migration/</link><pubDate>Sun, 05 Apr 2026 00:00:00 +0900</pubDate><guid>https://yn-labs.com/posts/lazydocker-wsl2-migration/</guid><description>&lt;p&gt;開発環境のメモリ不足、深刻ですよね。&lt;br&gt;
PCにメモリを32GB積んでいてもブラウザ、IDE、そして最近ではローカルLLM（Ollama等）を同時に立ち上げると、リソースはあっという間に枯渇します。&lt;/p&gt;
&lt;p&gt;タスクマネージャーを見ると、常に上位に居座っているのが &lt;strong&gt;Docker Desktop&lt;/strong&gt; 関連のプロセスや、肥大化した &lt;strong&gt;Vmmem&lt;/strong&gt; です。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Vmmemとは？&lt;/strong&gt;&lt;br&gt;
WSL2などの仮想マシンが使用しているメモリやCPUリソースを管理している、Windows側のプロセスのことです。&lt;br&gt;
WSL2側でメモリを使うと、Windows側ではこのVmmemのメモリ使用量が増加します。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;「GUIでコンテナの状態を確認したい」というだけなのに、そのために重厚な仮想マシン管理プロセスを常駐させるのは、リソース効率の観点から最適解とは言えません。&lt;/p&gt;
&lt;p&gt;そこで今回は、&lt;strong&gt;Docker Desktopをアンインストールし、WSL2ネイティブのDocker Engine + LazyDocker&lt;/strong&gt; に移行する方法を紹介します。&lt;br&gt;
さらに、&lt;strong&gt;「使う時だけ起動し、終わったらメモリを即座に解放する」&lt;/strong&gt; 運用フローまでを構築し、開発機のスペックを極限まで引き出します。&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;前提条件:&lt;/strong&gt; WSL2 で systemd が有効であること。&lt;code&gt;/etc/wsl.conf&lt;/code&gt; に &lt;code&gt;[boot]&lt;/code&gt; セクションで &lt;code&gt;systemd=true&lt;/code&gt; が設定されている必要があります。&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="本記事のゴール"&gt;本記事のゴール&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Go言語の最新版をWSL2にインストールする&lt;/li&gt;
&lt;li&gt;Native Docker Engineを導入し、自動起動を無効化する&lt;/li&gt;
&lt;li&gt;LazyDockerを導入し、マウスレスで快適な管理環境を作る&lt;/li&gt;
&lt;li&gt;コマンド一発で「起動→作業→完全停止」する&lt;strong&gt;最強のエイリアス&lt;/strong&gt;を作る&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="step-1-go言語-golang-の導入"&gt;Step 1. Go言語 (Golang) の導入&lt;/h3&gt;
&lt;p&gt;LazyDockerはGo製ツールです。&lt;br&gt;
バイナリを直接落とすこともできますが、Go環境を入れておくとアップデート管理が楽ですし、他のモダンなCLIツールも導入しやすくなるため、最初に導入してしまいます。&lt;/p&gt;
&lt;p&gt;WSL2 (Ubuntu) 上で以下を実行します。&lt;br&gt;
※ &lt;code&gt;apt install golang&lt;/code&gt; はバージョンが古いことが多いため、今回は公式からバイナリを取得して導入します（nvm等で管理したい方はそちらでも構いません）。&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 既存の古いGoがあれば削除&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo rm -rf /usr/local/go
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 最新版をダウンロードして展開&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# バージョンは https://go.dev/dl/ で最新を確認してください&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;wget https://go.dev/dl/go1.26.1.linux-amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo tar -C /usr/local -xzf go1.26.1.linux-amd64.tar.gz
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# パスを通す（go install のバイナリ用に $HOME/go/bin も追加）&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;echo &lt;span style="color:#e6db74"&gt;&amp;#39;export PATH=$PATH:/usr/local/go/bin:$HOME/go/bin&amp;#39;&lt;/span&gt; &amp;gt;&amp;gt; ~/.bashrc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;source ~/.bashrc
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# 確認&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;go version
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="step-2-native-docker-engine-の導入とオンデマンド化"&gt;Step 2. Native Docker Engine の導入と「オンデマンド化」&lt;/h3&gt;
&lt;p&gt;ここが本記事の肝です。&lt;br&gt;
Docker Desktopを削除し、純粋なLinux版Docker Engineを入れた上で、「PC起動時に勝手に立ち上がらない（Systemdの自動起動無効化）」設定までを一気に行います。&lt;/p&gt;</description></item><item><title>Bridge不要のProtonMail MCPサーバーを作った</title><link>https://yn-labs.com/posts/protonmail-mcp/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0900</pubDate><guid>https://yn-labs.com/posts/protonmail-mcp/</guid><description>&lt;h2 id="課題"&gt;課題&lt;/h2&gt;
&lt;p&gt;既存のProtonMail MCPサーバーは全てProton Bridge（有料デスクトップアプリ）が必要。&lt;br&gt;
無料のProtonMailユーザーはAIアシスタントとメールを連携する手段がない。&lt;/p&gt;
&lt;p&gt;GitHubで11個のProtonMail MCPプロジェクトを調査した。&lt;br&gt;
全てBridge必須だった。&lt;/p&gt;
&lt;h2 id="解決策"&gt;解決策&lt;/h2&gt;
&lt;p&gt;&lt;a href="https://github.com/ichiburn/protonmail-mcp"&gt;protonmail-mcp&lt;/a&gt; を構築した。&lt;br&gt;
Protonの公式オープンソースライブラリのみを使い、APIと直接通信するGo製MCPサーバー:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/ProtonMail/go-proton-api"&gt;go-proton-api&lt;/a&gt;&lt;/strong&gt; — Proton Bridge自体が使用するライブラリ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/ProtonMail/go-srp"&gt;go-srp&lt;/a&gt;&lt;/strong&gt; — SRP認証&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/ProtonMail/gopenpgp"&gt;gopenpgp&lt;/a&gt;&lt;/strong&gt; — PGP暗号化/復号&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;サードパーティAPIラッパーは不使用。&lt;br&gt;
パスワードや秘密鍵を扱う未知のパッケージによるサプライチェーンリスクなし。&lt;/p&gt;
&lt;h2 id="機能"&gt;機能&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ログイン&lt;/strong&gt; — SRP認証 + 2FA（TOTP）対応&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;読取&lt;/strong&gt; — PGP暗号化メールの復号・閲覧&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;検索&lt;/strong&gt; — 送信者、件名、キーワードでフィルタ&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;送信&lt;/strong&gt; — サーバーサイドトークンによる2段階確認（プロンプトインジェクション対策）&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="セキュリティ-8ラウンドの敵対的レビュー"&gt;セキュリティ: 8ラウンドの敵対的レビュー&lt;/h2&gt;
&lt;p&gt;Writer/Reviewer分離（Claude実装 → Codexレビュー）で8ラウンドの敵対的セキュリティレビューを実施。&lt;/p&gt;
&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;ラウンド&lt;/th&gt;
 &lt;th&gt;CRITICAL&lt;/th&gt;
 &lt;th&gt;HIGH&lt;/th&gt;
 &lt;th&gt;MEDIUM&lt;/th&gt;
 &lt;th&gt;修正&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;7&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;3&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;5&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;td&gt;4&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;6&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;td&gt;2&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;7&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;0&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;td&gt;1&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;&lt;strong&gt;8&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
 &lt;td&gt;&lt;strong&gt;0&lt;/strong&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;24件の問題を発見・修正。&lt;br&gt;
主な発見事項:&lt;/p&gt;</description></item><item><title>Building a Bridge-Free ProtonMail MCP Server</title><link>https://yn-labs.com/en/posts/protonmail-mcp/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0900</pubDate><guid>https://yn-labs.com/en/posts/protonmail-mcp/</guid><description>&lt;h2 id="the-problem"&gt;The Problem&lt;/h2&gt;
&lt;p&gt;Every existing ProtonMail MCP server requires Proton Bridge — a paid desktop app. Free ProtonMail users have no way to integrate their email with AI assistants.&lt;/p&gt;
&lt;p&gt;I found 11 existing ProtonMail MCP projects on GitHub. All of them require Bridge.&lt;/p&gt;
&lt;h2 id="the-solution"&gt;The Solution&lt;/h2&gt;
&lt;p&gt;I built &lt;a href="https://github.com/ichiburn/protonmail-mcp"&gt;protonmail-mcp&lt;/a&gt; — a Go MCP server that talks directly to Proton&amp;rsquo;s API using only their official open-source libraries:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/ProtonMail/go-proton-api"&gt;go-proton-api&lt;/a&gt;&lt;/strong&gt; — The same library used by Proton Bridge itself&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/ProtonMail/go-srp"&gt;go-srp&lt;/a&gt;&lt;/strong&gt; — SRP authentication&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;a href="https://github.com/ProtonMail/gopenpgp"&gt;gopenpgp&lt;/a&gt;&lt;/strong&gt; — PGP encryption/decryption&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No third-party API wrappers. No supply chain risk from unknown packages handling your passwords and private keys.&lt;/p&gt;</description></item><item><title>Disclosure under the Specified Commercial Transactions Act</title><link>https://yn-labs.com/en/legal/tokushoho/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0900</pubDate><guid>https://yn-labs.com/en/legal/tokushoho/</guid><description>&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Item&lt;/th&gt;
 &lt;th&gt;Details&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Business Name&lt;/td&gt;
 &lt;td&gt;Yorozuya Neko Labs (万屋猫Labs)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Contact&lt;/td&gt;
 &lt;td&gt;&lt;a href="mailto:contact@yn-labs.com"&gt;contact@yn-labs.com&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Pricing&lt;/td&gt;
 &lt;td&gt;See &lt;a href="https://yn-labs.com/en/services/"&gt;Services&lt;/a&gt; page&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Payment Method&lt;/td&gt;
 &lt;td&gt;Bank transfer&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Payment Terms&lt;/td&gt;
 &lt;td&gt;Invoiced after delivery, due within 30 days&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Service Delivery&lt;/td&gt;
 &lt;td&gt;Per agreed timeline after contract&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Cancellation Policy&lt;/td&gt;
 &lt;td&gt;No refund after work begins. Full refund if cancelled before work starts&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Representative&lt;/td&gt;
 &lt;td&gt;Ichiburn (Yorozuya Neko Labs)&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Address / Phone&lt;/td&gt;
 &lt;td&gt;Disclosed upon request without delay&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>特定商取引法に基づく表記</title><link>https://yn-labs.com/legal/tokushoho/</link><pubDate>Thu, 02 Apr 2026 00:00:00 +0900</pubDate><guid>https://yn-labs.com/legal/tokushoho/</guid><description>&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;項目&lt;/th&gt;
 &lt;th&gt;内容&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;事業者名称&lt;/td&gt;
 &lt;td&gt;万屋猫Labs&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;連絡先&lt;/td&gt;
 &lt;td&gt;&lt;a href="mailto:contact@yn-labs.com"&gt;contact@yn-labs.com&lt;/a&gt;&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;販売価格&lt;/td&gt;
 &lt;td&gt;&lt;a href="https://yn-labs.com/services/"&gt;サービスページ&lt;/a&gt;に記載&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;支払方法&lt;/td&gt;
 &lt;td&gt;銀行振込&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;支払時期&lt;/td&gt;
 &lt;td&gt;納品後請求、請求書発行日より30日以内&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;サービス提供時期&lt;/td&gt;
 &lt;td&gt;契約後、別途合意した納期による&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;返品・キャンセル&lt;/td&gt;
 &lt;td&gt;サービスの性質上、着手後の返金は原則不可。着手前のキャンセルは全額返金&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;代表者&lt;/td&gt;
 &lt;td&gt;Ichiburn（万屋猫Labs 代表）&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;所在地・電話番号&lt;/td&gt;
 &lt;td&gt;ご請求をいただいた場合は、遅滞なく開示いたします&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;</description></item><item><title>KalmarCTF 2026 RootBabyKalmarCTF Writeup — Zip Slip (CVE-2026-30345) for CTFd Root</title><link>https://yn-labs.com/en/writeups/ctf/kalmarctf-2026-rootbabykalmarctf-zip-slip/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0900</pubDate><guid>https://yn-labs.com/en/writeups/ctf/kalmarctf-2026-rootbabykalmarctf-zip-slip/</guid><description>&lt;h2 id="overview"&gt;Overview&lt;/h2&gt;
&lt;p&gt;KalmarCTF 2026 Web challenge &amp;ldquo;RootBabyKalmarCTF&amp;rdquo; (170pts).&lt;br&gt;
A CTFd 3.8.1 instance is provided with admin credentials for the management panel.&lt;br&gt;
The goal is to read &lt;code&gt;/flag2-&amp;lt;random&amp;gt;.txt&lt;/code&gt; as &lt;strong&gt;root&lt;/strong&gt;, not admin.&lt;/p&gt;
&lt;h2 id="vulnerability"&gt;Vulnerability&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;CVE-2026-30345: CTFd 3.8.1 Zip Slip (Path Traversal)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;/admin/import&lt;/code&gt; backup import function checks if ZIP file entry names contain &lt;code&gt;..&lt;/code&gt;.&lt;br&gt;
However, the check can be bypassed using the &lt;code&gt;uploads//absolute/path&lt;/code&gt; format (double slash).&lt;/p&gt;
&lt;h3 id="the-check"&gt;The Check&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; f &lt;span style="color:#f92672"&gt;in&lt;/span&gt; members:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; f&lt;span style="color:#f92672"&gt;.&lt;/span&gt;startswith(&lt;span style="color:#e6db74"&gt;&amp;#34;/&amp;#34;&lt;/span&gt;) &lt;span style="color:#f92672"&gt;or&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;..&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;in&lt;/span&gt; f:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;raise&lt;/span&gt; zipfile&lt;span style="color:#f92672"&gt;.&lt;/span&gt;BadZipfile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="the-bypass"&gt;The Bypass&lt;/h3&gt;
&lt;p&gt;Entry name: &lt;code&gt;uploads//opt/CTFd/manage.py&lt;/code&gt;&lt;/p&gt;</description></item><item><title>KalmarCTF 2026 RootBabyKalmarCTF Writeup — Zip Slip (CVE-2026-30345) で CTFd root 奪取</title><link>https://yn-labs.com/writeups/ctf/kalmarctf-2026-rootbabykalmarctf-zip-slip/</link><pubDate>Sun, 29 Mar 2026 00:00:00 +0900</pubDate><guid>https://yn-labs.com/writeups/ctf/kalmarctf-2026-rootbabykalmarctf-zip-slip/</guid><description>&lt;h2 id="概要"&gt;概要&lt;/h2&gt;
&lt;p&gt;KalmarCTF 2026 の Web 問題「RootBabyKalmarCTF」（170pts）。&lt;br&gt;
CTFd 3.8.1 のインスタンスが与えられ、admin 認証情報で管理パネルにアクセスできる。&lt;br&gt;
目標は admin ではなく &lt;strong&gt;root&lt;/strong&gt; 権限でファイル &lt;code&gt;/flag2-&amp;lt;random&amp;gt;.txt&lt;/code&gt; を読むこと。&lt;/p&gt;
&lt;h2 id="脆弱性"&gt;脆弱性&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;CVE-2026-30345: CTFd 3.8.1 Zip Slip (Path Traversal)&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/admin/import&lt;/code&gt; のバックアップインポート機能で、ZIP ファイル内のエントリ名に &lt;code&gt;..&lt;/code&gt; が含まれるかチェックしている。&lt;br&gt;
しかし &lt;code&gt;uploads//absolute/path&lt;/code&gt; 形式（ダブルスラッシュ）でバイパス可能。&lt;/p&gt;
&lt;h3 id="チェックのコード"&gt;チェックのコード&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-python" data-lang="python"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; f &lt;span style="color:#f92672"&gt;in&lt;/span&gt; members:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; f&lt;span style="color:#f92672"&gt;.&lt;/span&gt;startswith(&lt;span style="color:#e6db74"&gt;&amp;#34;/&amp;#34;&lt;/span&gt;) &lt;span style="color:#f92672"&gt;or&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;..&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;in&lt;/span&gt; f:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;raise&lt;/span&gt; zipfile&lt;span style="color:#f92672"&gt;.&lt;/span&gt;BadZipfile
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="バイパス"&gt;バイパス&lt;/h3&gt;
&lt;p&gt;エントリ名: &lt;code&gt;uploads//opt/CTFd/manage.py&lt;/code&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;startswith(&amp;quot;/&amp;quot;)&lt;/code&gt; → False（&lt;code&gt;uploads/&lt;/code&gt; で始まる）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;&amp;quot;..&amp;quot; in f&lt;/code&gt; → False（&lt;code&gt;..&lt;/code&gt; を含まない）&lt;/li&gt;
&lt;li&gt;ファイル処理: &lt;code&gt;f.split(&amp;quot;/&amp;quot;, 1)[1]&lt;/code&gt; → &lt;code&gt;/opt/CTFd/manage.py&lt;/code&gt;（絶対パス）&lt;/li&gt;
&lt;li&gt;&lt;code&gt;os.path.join(&amp;quot;/var/CTFd/uploads&amp;quot;, &amp;quot;/opt/CTFd/manage.py&amp;quot;)&lt;/code&gt; → &lt;strong&gt;&lt;code&gt;/opt/CTFd/manage.py&lt;/code&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Python の &lt;code&gt;os.path.join&lt;/code&gt; は第2引数が絶対パスの場合、第1引数を無視する。&lt;br&gt;
これが Zip Slip バイパスの核心。&lt;/p&gt;</description></item><item><title>About</title><link>https://yn-labs.com/en/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yn-labs.com/en/about/</guid><description>&lt;h1 id="about-yorozuya-neko-labs"&gt;About Yorozuya Neko Labs&lt;/h1&gt;
&lt;img src="https://yn-labs.com/images/ichiburn_icon.png" alt="Ichiburn" class="w-24 h-24 rounded-full border-2 border-chrome shadow-metal mb-6"&gt;
&lt;h2 id="who-is-ichiburn"&gt;Who is Ichiburn?&lt;/h2&gt;
&lt;p&gt;Sole proprietor specializing in AI automation and security.&lt;br&gt;
&amp;ldquo;Yorozuya&amp;rdquo; (万屋) means &amp;ldquo;general store&amp;rdquo; — we solve any technical challenge you throw at us.&lt;/p&gt;
&lt;h3 id="skills"&gt;Skills&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AI Automation&lt;/strong&gt;: MCP Development, LLM Integration, AI Workflow Automation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: Bug Bounty, Web Pentesting, CTF (Pwn/Web), Security Review Automation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;: Terraform, Cloudflare, AWS, OCI, Docker, GitHub Actions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Development&lt;/strong&gt;: Go, Rust, Python, TypeScript, Next.js, .NET&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="oss"&gt;OSS&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ichiburn/protonmail-mcp"&gt;protonmail-mcp&lt;/a&gt; — Bridge-free ProtonMail MCP server for AI assistants&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="contact"&gt;Contact&lt;/h3&gt;
&lt;p&gt;Reach out via &lt;a href="https://yn-labs.com/en/services/"&gt;the inquiry form&lt;/a&gt; or &lt;a href="mailto:contact@yn-labs.com"&gt;contact@yn-labs.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Services</title><link>https://yn-labs.com/en/services/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yn-labs.com/en/services/</guid><description/></item><item><title>Services</title><link>https://yn-labs.com/services/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yn-labs.com/services/</guid><description/></item><item><title>運営者概要</title><link>https://yn-labs.com/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://yn-labs.com/about/</guid><description>&lt;h1 id="万屋猫labs-運営者概要"&gt;万屋猫Labs 運営者概要&lt;/h1&gt;
&lt;img src="https://yn-labs.com/images/ichiburn_icon.png" alt="Ichiburn" class="w-24 h-24 rounded-full border-2 border-chrome shadow-metal mb-6"&gt;
&lt;h2 id="who-is-ichiburn"&gt;Who is Ichiburn?&lt;/h2&gt;
&lt;p&gt;AI自動化とセキュリティを主軸に活動する個人事業主。&lt;br&gt;
「万屋（よろずや）」の名の通り、ITに関するあらゆる技術的課題を解決する工房を営んでいます。&lt;/p&gt;
&lt;h3 id="主要スキル"&gt;主要スキル&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;AI Automation&lt;/strong&gt;: MCP Development, AI Workflow Automation, LLM Integration&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Security&lt;/strong&gt;: Bug Bounty, Web Pentesting, CTF (Pwn/Web), Security Review Automation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Infrastructure&lt;/strong&gt;: Terraform, Cloudflare, AWS, OCI, Docker, GitHub Actions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Development&lt;/strong&gt;: Go, Rust, Python, TypeScript, Next.js, .NET&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="oss"&gt;OSS&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/ichiburn/protonmail-mcp"&gt;protonmail-mcp&lt;/a&gt; — Bridge不要のProtonMail MCPサーバー（世界初）&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="お問い合わせ"&gt;お問い合わせ&lt;/h3&gt;
&lt;p&gt;ご依頼、ご相談は &lt;a href="https://yn-labs.com/services/"&gt;お問い合わせフォーム&lt;/a&gt; または &lt;a href="mailto:contact@yn-labs.com"&gt;contact@yn-labs.com&lt;/a&gt; よりご連絡ください。&lt;/p&gt;</description></item></channel></rss>