Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
ツール/GitHubGitHub/securego/gosec
静的コード分析 (SAST)脆弱性分析コード分析DevSecOps
GitHubsecurego/gosec

gosec

Go セキュリティチェッカー

リポジトリを見るウェブサイト
8.9k70111日前Kitploit レビュー済み

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

gosec - Go セキュリティチェッカー

Go AST および SSA コード表現をスキャンすることで、ソースコードのセキュリティ問題を検査します。

クイックリンク

  • GitHub Action
  • ローカルインストール
  • クイックスタート
  • 一般的な使用パターン
  • ルールの選択
  • 出力フォーマット

特徴

  • パターンベースのルール — Go コードにおける一般的なセキュリティ問題を検出
  • SSA ベースのアナライザー — 型変換、スライス境界、暗号問題に対応
  • 汚染解析 — ユーザー入力から危険な関数(SQLインジェクション、コマンドインジェクション、パストラバーサル、SSRF、XSS、ログインジェクション、SMTPインジェクション、SSTI、安全でないデシリアライゼーション、オープンリダイレクト)へのデータフローを追跡

ライセンス

Apache License, Version 2.0(以下「ライセンス」)に基づいてライセンスされています。 ライセンスに従わない限り、このファイルを使用することはできません。 ライセンスのコピーはこちらから入手できます。

プロジェクトの状態

CII Best Practices Build Status Coverage Status GoReport GoDoc Docs Downloads GHCR Slack go-recipes

インストール

GitHub Action

以下のように、gosec を GitHub Action として実行できます。

最新の安定版リリースに固定されている @master 付きのバージョンタグを使用してください。これにより安定した動作が提供されます。```yaml name: Run Gosec on: push: branches: - master pull_request: branches: - master jobs: tests: runs-on: ubuntu-latest env: GO111MODULE: on steps: - name: Checkout Source uses: actions/checkout@v3 - name: Run Gosec Security Scanner uses: securego/gosec@master with: args: ./...

root@kitploit:~
#### プライベートモジュールを使用したプロジェクトのスキャン

プロジェクトがプライベートなGoモジュールをインポートしている場合、`gosec`が依存関係を取得できるように認証を設定する必要があります。ワークフローで以下の環境変数を設定してください:

- `GOPRIVATE`: プライベートと見なされるモジュールパスプレフィックスのカンマ区切りリスト(例:`github.com/your-org/*`)。
- `GITHUB_AUTHENTICATION_TOKEN`: プライベートリポジトリへの読み取りアクセス権を持つGitHubトークン。```yaml
name: Run Gosec
on:
  push:
    branches:
      - master
  pull_request:
    branches:
      - master
jobs:
  tests:
    runs-on: ubuntu-latest
    env:
      GO111MODULE: on
      GOPRIVATE: github.com/your-org/*
      GITHUB_AUTHENTICATION_TOKEN: ${{ secrets.PRIVATE_REPO_TOKEN }}
    steps:
      - name: Checkout Source
        uses: actions/checkout@v3
      - name: Run Gosec Security Scanner
        uses: securego/gosec@v2
        with:
          args: ./...

コードスキャンとの統合

SARIFファイルとしてデータをアップロードすることで、サードパーティのコード分析ツールを統合し、GitHubコードスキャンと連携できます。

このワークフローは、gosec をGitHub Actionsワークフローのステップとして実行し、results.sarif ファイルを出力する例を示しています。その後、ワークフローは upload-sarif アクションを使用して results.sarif ファイルをGitHubにアップロードします。```yaml name: "Security Scan"

Run workflow each time code is pushed to your repository and on a schedule.

The scheduled workflow runs every at 00:00 on Sunday UTC time.

on: push: schedule:

  • cron: '0 0 * * 0'

jobs: tests: runs-on: ubuntu-latest env: GO111MODULE: on steps: - name: Checkout Source uses: actions/checkout@v3 - name: Run Gosec Security Scanner uses: securego/gosec@v2 with: # we let the report trigger content trigger a failure using the GitHub Security features. args: '-no-fail -fmt sarif -out results.sarif ./...' - name: Upload SARIF file uses: github/codeql-action/upload-sarif@v2 with: # Path to SARIF file relative to the root of the repository sarif_file: results.sarif

root@kitploit:~
### Go分析

`goanalysis`パッケージは、
[`golang.org/x/tools/go/analysis.Analyzer`](https://pkg.go.dev/golang.org/x/tools/go/analysis)
を提供します。これは、標準のGo
分析インターフェースをサポートするツール、例えばBazelの
[nogo](https://github.com/bazelbuild/rules_go/blob/master/go/nogo.rst)
フレームワークとの統合のためのものです:```starlark
nogo(
    name = "nogo",
    deps = [
        "@com_github_securego_gosec_v2//goanalysis",
        # add more analyzers as needed
    ],
    visibility = ["//visibility:public"],
)

ローカルインストール

gosec は Go 1.25 以降が必要です。```bash go install github.com/securego/gosec/v2/cmd/gosec@latest

root@kitploit:~
## クイックスタート```bash
# Scan all packages in current module
gosec ./...

# Write JSON report
gosec -fmt json -out results.json ./...

# Write SARIF report for code scanning
gosec -fmt sarif -out results.sarif ./...

終了コード

  • 0: 抑制されていない発見/エラーなしでスキャンが完了
  • 1: 少なくとも1つの抑制されていない発見または処理エラー
  • -no-fail を使用すると常に 0 を返す

使い方

Gosec は、ルールのサブセットのみを実行したり、特定のファイルパスを除外したり、異なる形式でレポートを生成するように設定できます。デフォルトでは、与えられた入力ファイルに対してすべてのルールが実行されます。カレントディレクトリから再帰的にスキャンするには、入力引数として ./... を指定します。

利用可能なルール

gosec は以下のカテゴリにわたるルールを含んでいます:

  • G1xx: 一般的なセキュアコーディングの問題(例:ハードコードされた認証情報、安全でない使用法、HTTP 強化、クッキーセキュリティ)
  • G2xx: クエリ/テンプレート/コマンド構築におけるインジェクションリスク
  • G3xx: ファイルおよびパス処理のリスク(パーミッション、パストラバーサル、一時ファイル、アーカイブ抽出)
  • G4xx: 暗号化および TLS の脆弱性
  • G5xx: ブロックリストに登録されたインポート
  • G6xx: Go 固有の正当性/セキュリティチェック(例:range エイリアシング、スライス境界)
  • G7xx: 汚染解析ルール(SQL インジェクション、コマンドインジェクション、パストラバーサル、SSRF、XSS、ログ、SMTP インジェクション、SSTI、安全でないデシリアライゼーション、オープンリダイレクト)

完全なリスト、ルールの説明、ルールごとの設定については RULES.md を参照してください。

廃止されたルール

  • G105: math/big.Int.Exp の使用の監査 - CVE は修正済み
  • G307: エラーを返すメソッドの defer - この ブログ記事 の詳細にもかかわらず、 セキュリティ問題を修正するよりも不便を引き起こすため

ルールの選択

デフォルトでは、gosec は与えられたファイルパスに対してすべてのルールを実行します。しかし、-include= フラグを使用して実行するルールのサブセットを選択したり、-exclude= フラグを使用して明示的に除外するルールのセットを指定することが可能です。```bash

Run a specific set of rules

$ gosec -include=G101,G203,G401 ./...

Run everything except for rule G303

$ gosec -exclude=G303 ./...

root@kitploit:~
### CWEマッピング

`gosec`によって検出されたすべての問題は、脆弱性をより一般的な用語で説明する
[CWE(Common Weakness Enumeration)](http://cwe.mitre.org/data/index.html)
にマッピングされます。
正確なマッピングは
[こちら](https://github.com/securego/gosec/blob/master/issue/issue.go#L50)にあります。

### 設定

以下のように設定ファイルで、いくつかのグローバル設定を
指定できます:```JSON
{
    "global": {
        "nosec": "enabled",
        "audit": "enabled"
    }
}
  • nosec: この設定は、コードベース全体で定義されたすべての#nosecディレクティブを上書きします
  • audit: 監査モードで実行し、通常のコード解析では煩わしすぎる可能性のある追加チェックを有効にします```bash

Run with a global configuration file

$ gosec -conf config.json .

root@kitploit:~
### パスベースのルール除外

複数のコンポーネントを持つ大規模なリポジトリでは、パスごとに異なるセキュリティルールが必要になる場合があります。特定のパスに対して特定のルールを抑制するには、`exclude-rules` を使用します。

**設定ファイル:**```json
{
  "exclude-rules": [
    {
      "path": "cmd/.*",
      "rules": ["G204", "G304"]
    },
    {
      "path": "scripts/.*",
      "rules": ["*"]
    }
  ]
}

CLIフラグ:```bash

Exclude G204 and G304 from cmd/ directory

gosec --exclude-rules="cmd/.*:G204,G304" ./...

Exclude all rules from scripts/ directory

gosec --exclude-rules="scripts/.:" ./...

Multiple exclusions

gosec --exclude-rules="cmd/.:G204,G304;test/.:G101" ./...

root@kitploit:~
| フィールド | 型 | 説明 |
|-------|------|-------------|
| `path` | string (regex) | ファイルパスに対して照合する正規表現 |
| `rules` | []string | 除外するルールID。`*`はすべて |

#### ルール設定

一部のルールは設定フラグも受け入れます。これらのフラグは
[RULES.md](https://github.com/securego/gosec/blob/master/RULES.md) に文書化されています。

#### Go バージョン

一部のルールは特定の Go バージョンを必要とし、それはプロジェクト内の Go モジュールファイルから取得されます。このバージョンが見つからない場合は、Go ランタイムバージョンにフォールバックします。

Go モジュールバージョンは `go list` コマンドを使って解析されますが、場合によってはパフォーマンスの低下を引き起こす可能性があります。このような場合、環境変数 `GOSECGOVERSION=go1.21.1` を設定することで Go モジュールバージョンを簡単に指定できます。

### 依存関係

gosec は Go モジュールを使用してパッケージを読み込みます。ほとんどのプロジェクトでは、スキャン中に依存関係が自動的に解決されます。

依存関係が不足している場合は、以下を実行してください。

``````bash
go mod tidy
go mod download

テストファイルとフォルダの除外

gosec は、すべてのパッケージのテストファイルと、ベンダーディレクトリ内の依存関係を無視します。

テストファイルのスキャンは、次のフラグで有効にできます:```bash gosec -tests ./...

root@kitploit:~
また、追加のフォルダを以下のように除外することもできます:```bash
 gosec -exclude-dir=rules -exclude-dir=cmd ./...

生成されたファイルの除外

gosec は、デフォルトの生成コードコメントを使用して生成された Go ファイルを無視できます。``` // Code generated by some generator DO NOT EDIT.

root@kitploit:~
**CVE-2021-4034-alternative**
- このモジュールは、Python が利用できない場合の `cve_2021_4034_pwnkit_lpe_pkexec` モジュールの代替として、[CVE-2021-4034](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-4034) の悪用を試みます。
- [GitHub から代替エクスプロイトバイナリ](https://github.com/ly4k/PwnKit) をダウンロードし、実行時に `chmod u+s /usr/bin/pkexec` を実行して SUID バイナリを作成しようとします。成功すると、`/usr/bin/pkexec /bin/sh -p` を実行してルートシェルを取得します。
- **サポート対象プラットフォーム**: Linux

**options.cve_2021_4034_alternative.url**
- 代替エクスプロイトバイナリをダウンロードするための URL。
- **デフォルト**: `https://raw.githubusercontent.com/ly4k/PwnKit/main/PwnKit`
- デフォルトがアクセスできない場合は、代替 URL を指定できます。

**cve_2021_4034_pwnkit_lpe_pkexec**
- このモジュールは、pkexec(polkit 認証エージェントの一部として使用される setuid バイナリ)の脆弱性である [CVE-2021-4034](https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-4034) の悪用を試みます。
- この特定のバリアントは、[ly4k](https://github.com/ly4k/PwnKit) によって開発された `PwnKit` エクスプロイトを活用します。
- **サポート対象プラットフォーム**: Linux

**cve_2021_4034_pwnkit_lpe_pkexec_solaris**
- このモジュールは、Solaris システム上で CVE-2021-4034 を悪用します。
- 注意: これは Linux の pkexec エクスプロイトとは異なるバリアントであり、特に Solaris を標的にしています。
- **サポート対象プラットフォーム**: Solaris

**cve_2021_4034_pwnkit_lpe_pkexec_solaris_alt**
- このモジュールは、CVE-2021-4034 に対する代替の Solaris エクスプロイト手法です。
- **サポート対象プラットフォーム**: Solaris

**linux_exploit_suggester_2**
- Linux Exploit Suggester 2 (LES2) は、Linux システム上で潜在的な権限昇格ベクトルを特定するために設計されたツールです。
- カーネルバージョン、アーキテクチャ、その他のシステム設定を既知の脆弱性データベースと比較します。
- **サポート対象プラットフォーム**: Linux
- **オプション**: `check```bash
gosec -exclude-generated ./...

脆弱性の自動修正

gosec は AI の推奨に基づいて修正案を提案できます。セキュリティの問題に対する提案を得るために AI API を呼び出します。

この機能を有効にするには、以下のコマンドライン引数を指定します:

  • ai-api-provider: AI API プロバイダーの名前。 サポートされているプロバイダー:
    • Atlas Cloud: atlas(デフォルトモデル deepseek-ai/deepseek-v4-flash)、 atlas-deepseek-v4-flash、 atlas-qwen3-coder-next、atlas-kimi-k2.6、または Atlas Cloud でホストされている任意のチャットモデル用の atlas:<model-id>。 Atlas Cloud は OpenAI 互換のプロバイダーで、atlascloud.ai で利用できます。
    • Gemini: gemini-3-pro-preview(デフォルト)、 gemini-2.5-pro、gemini-2.5-flash、 gemini-2.5-flash-lite
    • Claude: claude-sonnet-4-6(デフォルト)、 、、 、、

🎁 Atlas Cloud は、開発者に単一の AI API を提供し、動画生成、画像生成、LLM API にアクセスできるフルモーダル AI 推論プラットフォームです。複数のベンダー統合を管理する代わりに、一度接続するだけで、300 以上の厳選されたモデルにすべてのモダリティで統合アクセスできます。

より予算に優しい API アクセスについては、Atlas Cloud の新しいコーディングプランプロモーションをご覧ください:https://www.atlascloud.ai/console/coding-plan

例:```bash

Using Atlas Cloud with the default DeepSeek V4 Flash model

export GOSEC_AI_API_KEY="your_key" export GOSEC_AI_PROVIDER="atlas" gosec ./...

Using Atlas Cloud with an explicit hosted model

GOSEC_AI_API_KEY="your_key"
gosec -ai-api-provider="atlas:qwen/qwen3-coder-next" ./...

Using Gemini

gosec -ai-api-provider="gemini-3-pro-preview"
-ai-api-key="your_key" ./...

Using Claude

gosec -ai-api-provider="claude-sonnet-4-6"
-ai-api-key="your_key" ./...

Using OpenAI

gosec -ai-api-provider="gpt-5.4"
-ai-api-key="your_key" ./...

Using Azure OpenAI

gosec -ai-api-provider="gpt-5.4"
-ai-api-key="your_azure_key"
-ai-base-url="https://your-resource.openai.azure.com/openai/deployments/your-deployment"
./...

Using local Ollama with custom model

gosec -ai-api-provider="llama3.2"
-ai-base-url="http://localhost:11434/v1"
./...

Using self-signed certificate API

gosec -ai-api-provider="custom-model"
-ai-api-key="your_key"
-ai-base-url="https://internal-api.company.com/v1"
-ai-skip-ssl
./...

root@kitploit:~
### コードの注釈

すべての自動検出ツールと同様に、誤検出が発生する場合があります。
gosecが手動で安全であることが確認された失敗を報告した場合、
`#nosec` で始まるコメントでコードに注釈を付けることが可能です。

`#nosec` コメントは、`#nosec [RuleList] [-- Justification]`
という形式である必要があります。

`#nosec` コメントは、警告が報告された行に配置する必要があります。```go
func main() {
	tr := &http.Transport{
		TLSClientConfig: &tls.Config{
			InsecureSkipVerify: true, // #nosec G402
		},
	}

	client := &http.Client{Transport: tr}
	_, err := client.Get("https://go.dev/")
	if err != nil {
		fmt.Println(err)
	}
}

特定の誤検出(false positive)が確認され、安全であると検証された場合、コードのセクション内でその単一のルール(または特定のルールセット)のみを抑制し、他の問題のスキャンを続けたいことがあります。これを行うには、#nosec アノテーション内で抑制するルールを列挙します。例: /* #nosec G401 */ または //#nosec G201 G202 G203

アノテーションに説明や正当化のテキストを記述することもできます。正当化は抑制するルールの後に記述し、2つ以上のダッシュで始めます。 例: //#nosec G101 G102 -- This is a false positive

あるいは、gosec は //gosec:disable ディレクティブもサポートしており、これは #nosec と同様に機能します:```go //gosec:disable G101 -- This is a false positive

root@kitploit:~
場合によっては、`#nosec` や `//gosec:disable` アノテーションが使用された箇所を再確認することも有用かもしれません。`#nosec` アノテーションを無視してスキャナーを実行するには、以下のようにします:```bash
gosec -nosec=true ./...

ルールIDと正当化の要求

アノテーションが無関係なルールを誤って抑制したり、説明なしに追加されたりするのを防ぐために、gosecは2つのオプトインフラグを受け付けます。両方ともデフォルトはfalseであり、既存のコードベースは変更なく動作し続けます。

  • -nosec-require-rules は、ルールIDをリストしていない裸の #nosec / //gosec:disable ディレクティブを拒否します。
  • -nosec-require-justification は、ルールリストの後に -- justification を持たないディレクティブを拒否します。

有効にすると、チェックに失敗したディレクティブは発見を抑制しなくなり、その行の根本的な問題とともに出力にエラーとして報告されます。```bash gosec -nosec-require-rules -nosec-require-justification ./...

root@kitploit:~
同じオプションはグローバル設定ブロックを介して設定できます:```json
{
    "global": {
        "nosec-require-rules": "enabled",
        "nosec-require-justification": "enabled"
    }
}

抑制の追跡

上記のように、違反は外部(-include/-excludeを使用)またはインライン(#nosecアノテーションを使用)で抑制できます。監査のために抑制メタデータを出力できます。-track-suppressionsを使用して抑制追跡を有効にします:```bash gosec -track-suppressions -exclude=G101
-fmt=sarif -out=results.sarif ./...

root@kitploit:~
- 外部抑制の場合、gosecは抑制情報を記録します。  
  ここで`kind`は`external`、`justification`は  
  `Globally suppressed.`です。
- インライン抑制の場合、gosecは抑制情報を記録します。  
  ここで`kind`は`inSource`、`justification`はコメント内の  
  2つ以上のダッシュの後のテキストです。

**注:** 抑制の追跡をサポートするのはSARIFおよびJSON形式のみです。

### ビルドタグ

gosecは、あなたの  
[Go build tags](https://pkg.go.dev/go/build/)をアナライザに渡すことができます。  
これらは以下のようにカンマ区切りのリストとして提供できます。```bash
gosec -tags debug,ignore ./...

出力形式

gosecは text, json, yaml, csv, junit-xml, html, sonarqube, golint, sarif をサポートしています。デフォルトでは結果は標準出力に報告されますが、出力ファイルに書き込むこともできます。出力形式は -fmt フラグで制御され、出力ファイルは -out フラグで制御されます。その方法は次の通りです:

root@kitploit:~
$ gosec -fmt=json -out=results.json ./...
``````bash
# Write output in json format to results.json
$ gosec -fmt=json -out=results.json *.go

Use -stdout を使用すると、結果を表示しながら -out にも書き込めます。 Use -verbose を使用すると、ファイル形式を保持したまま stdout のフォーマットを上書きできます。```bash

Write output in json format to results.json as well as stdout

$ gosec -fmt=json -out=results.json -stdout *.go

Overrides the output format to 'text' when stdout the results,

while writing it to results.json

$ gosec -fmt=json -out=results.json -stdout -verbose=text *.go

root@kitploit:~
**注記:** gosecはSonarQube向けに
[汎用課題インポート形式](https://docs.sonarqube.org/latest/analysis/generic-issue/)
を生成します。レポートはSonarQubeにインポートするために、
`sonar.externalIssuesReportPaths=path/to/gosec-report.json`
を使用する必要があります。

## 一般的な使用パターン```bash
# Fail only on medium+ severity findings
gosec -severity medium ./...

# Fail only on medium+ confidence findings
gosec -confidence medium ./...

# Exclude specific rules for specific paths
gosec --exclude-rules="cmd/.*:G204,G304;scripts/.*:*" ./...

# Exclude generated files in scan
gosec -exclude-generated ./...

# Include test files in scan
gosec -tests ./...

開発

開発ドキュメントは DEVELOPMENT.md に移動しました。

gosec を使用している組織

これは gosec のユーザーの一部をまとめたリストです。

スポンサー

スポンサーになることでこのプロジェクトを支援してください。あなたのロゴがここに表示され、あなたのウェブサイトへのリンクが貼られます。

ツールをダウンロード
claude-opus-4-7
claude-opus-4-6
claude-sonnet-4-5
claude-opus-4-5
claude-haiku-4-5
  • OpenAI: gpt-5.4(デフォルト)、gpt-5.4-mini、 gpt-5.4-nano
  • カスタム OpenAI 互換: 任意のカスタムモデル名 (ai-base-url が必要)
  • ai-api-key または環境変数 GOSEC_AI_API_KEY を設定:AI API にアクセスするためのキー
    • Gemini の場合、これらの手順に従って API キーを作成できます。
    • Claude の場合、Anthropic Console から API キーを取得してください。
    • OpenAI の場合、OpenAI Platform から API キーを取得してください。
  • ai-base-url:(オプション)OpenAI 互換 API のカスタムベース URL(例:Azure OpenAI、LocalAI、Ollama)
    • Atlas Cloud はデフォルトで https://api.atlascloud.ai/v1 を使用するため、組み込みの atlas プロバイダーでは ai-base-url はオプションです。
  • GOSEC_AI_PROVIDER:(オプション)ai-api-provider の代替となる環境変数
  • GOSEC_AI_BASE_URL:(オプション)ai-base-url の代替となる環境変数
  • ai-skip-ssl:(オプション)AI API の SSL 証明書検証をスキップ(自己署名証明書に便利)