PyPI リポジトリ内の Python パッケージの 46% に、安全でない可能性のあるコードが含まれています

トゥルク大学 (フィンランド) の研究者グループは、脆弱性を引き起こす可能性のある潜在的に危険な構造が使用されている PyPI リポジトリ内のパッケージの分析結果を発表しました。 197 個のパッケージの分析中に、749 個の潜在的なセキュリティ問題が特定されました。 パッケージの 46% に少なくとも XNUMX つの同様の問題があります。 最も一般的な問題には、例外処理とコード置換を可能にする機能の使用に関連する欠点があります。

特定された 749 万 442 件の問題のうち、41 万 227 件 (30%) が軽度の問題、80 万 11 件 (2589%) が中程度の問題、2356 万件 (XNUMX%) が危険と分類されました。 いくつかのパッケージは群衆の中で際立っており、数千の問題を含んでいます。たとえば、PyGGI パッケージでは主に「try-excel-pass」構造の使用に関連する XNUMX 件の問題が特定され、appengine-sdk パッケージでは XNUMX 件の問題が見つかりました。 genie.libs.ops、pbcore、genie.libs.parser パッケージにも多数の問題が存在します。

結果は自動静的解析に基づいて得られたものであり、特定の構造の適用状況は考慮されていないことに注意してください。 コードのスキャンに使用されたバンディット ツールキットの開発者は、誤検知の数が非常に多いため、各問題を手動でさらに確認しない限り、スキャン結果を直接脆弱性とみなすことはできないとの意見を表明しました。

たとえば、アナライザーは、MD5 などの信頼性の低い乱数生成器やハッシュ アルゴリズムの使用をセキュリティ上の問題とみなしますが、コード内ではそのようなアルゴリズムがセキュリティに影響を与えない目的で使用される可能性があります。 アナライザーは、pickle、yaml.load、subprocess、eval などの安全でない関数での外部データの処理も問題とみなしますが、この使用には必ずしも脆弱性が伴うわけではなく、実際にこれらの関数の使用はセキュリティ上の脅威なしに実装できます。 。

研究で使用されたテストには次のようなものがあります。

  • 安全でない可能性のある関数 exec、mktemp、eval、mark_safe などを使用する。
  • ファイルへのアクセス権の設定が安全ではありません。
  • すべてのネットワーク インターフェイスにネットワーク ソケットを接続します。
  • コード内で厳密に指定されたパスワードとキーの使用。
  • 事前定義された一時ディレクトリを使用します。
  • キャッチオール スタイルの例外ハンドラーでの pass および continue の使用。
  • デバッグ モードを有効にして、Flask Web フレームワークに基づく Web アプリケーションを起動します。
  • 安全でないデータ逆シリアル化方法を使用する。
  • MD2、MD4、MD5、SHA1 ハッシュ関数を使用します。
  • 安全でない DES 暗号および暗号化モードの使用。
  • Python の一部のバージョンでの安全でない HTTPSConnection 実装の使用。
  • urlopen で file:// スキームを指定します。
  • 暗号化タスクを実行するときに擬似乱数ジェネレーターを使用する。
  • Telnet プロトコルを使用します。
  • 安全でない XML パーサーの使用。

さらに、PyPI ディレクトリで 8 つの悪意のあるパッケージが検出されたことがわかります。 削除される前、問題のあるパッケージは 30 回以上ダウンロードされていました。 悪意のあるアクティビティを隠し、パッケージ内の単純な静的アナライザーからの警告を回避するために、コード ブロックは Base64 を使用してエンコードされ、eval 呼び出しを使用してデコード後に実行されました。

noblesse、genesisbot、are、pour、noblesse2、noblessev2 の各パッケージには、Chrome および Edge ブラウザに保存されているクレジット カード番号とパスワードを傍受するコードが含まれているほか、Discord アプリケーションからアカウント トークンを転送し、画面コンテンツのスクリーンショットなどのシステム データを送信します。 pytagora および pytagora2 パッケージには、サードパーティの実行可能コードをロードして実行する機能が含まれていました。

出所: オープンネット.ru

コメントを追加します