omamori 0.1.0 → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 98648919f99277d6023e0d6639b4d3c012b5efb901b8a7db485c1333470f9ff8
4
- data.tar.gz: 943da793baa121c246f48083ee4630bc881c70209e4e5e0a73dd3342d63ee690
3
+ metadata.gz: 047332a1b52e201377fafce4a1556aaff4653c6f8982914d35486b0ae6413f48
4
+ data.tar.gz: 2ae4023aec70fcd7242c035787787cf5ab0803bcb242ec93d347a8eb98daff70
5
5
  SHA512:
6
- metadata.gz: 763f89ef7db133c5871fe8cdecb712df7ba881f754e2fb815b1f64622ff1974711c81316f06a92734232f2c3753403e0f2508146cff73aba87f07926b8a49a40
7
- data.tar.gz: 3f0a079cd48d064ae1dc383948de694b2afcfbea51823042bec387e164e4f7dfcbe7aca373948c72b8568c1f3f1941f019ee5822f431776b28089b6adda1727a
6
+ metadata.gz: 125dad0b11d11a647b943e4761049e34176f7b628ebb28487f4e30221aed3b967cedaf7f23f3ef547f3f5096c1a9bb38898213fa5e8cd97c641e5ecd26131df7
7
+ data.tar.gz: a972855f407359eaafee5e524e2b20d7ae303afc3dd2d8b972d2e385c45ed91ee5d84aa78007edd37c746d9e285c9958ebc205bb5008f575839632be31de07fa
data/README.md CHANGED
@@ -145,16 +145,15 @@ The `demo` directory contains example files with known vulnerabilities that can
145
145
 
146
146
  To run Omamori on the demo files, you need to stage the changes in the `demo` directory. Since the `demo` directory might be ignored by git, follow these steps:
147
147
 
148
- 1. Ensure the `demo` directory is not ignored by git. If it is listed in your `.gitignore` file, remove or comment out the line.
149
- 2. Rename the `demo` directory to `demo_`:
148
+ 1. Copy the `demo` directory:
150
149
  ```bash
151
- mv demo demo_
150
+ cp -r demo demo_
152
151
  ```
153
- 3. Stage the `demo` directory again:
152
+ 2. Stage the `demo_` directory:
154
153
  ```bash
155
154
  git add demo_
156
155
  ```
157
- 4. Now you can run Omamori on the staged demo files:
156
+ 3. Now you can run Omamori on the staged demo files:
158
157
  ```bash
159
158
  omamori scan
160
159
  ```
data/README_ja.md CHANGED
@@ -141,20 +141,19 @@ model: gemini-2.5-flash-preview-04-17
141
141
 
142
142
  デモファイルを対象にOmamoriを実行するには、以下の手順を実施してください:
143
143
 
144
- 1. `demo`ディレクトリがgitで無視されていないことを確認します。`.gitignore`に記載されている場合は、コメントアウトまたは削除します。
145
- 2. `demo`ディレクトリ名を変更します:
144
+ 1. `demo`ディレクトリをコピーします:
146
145
 
147
146
  ```bash
148
- mv demo demo_
147
+ cp -r demo demo_
149
148
  ```
150
149
 
151
- 3. 変更後の`demo_`ディレクトリをステージします:
150
+ 2. コピーした`demo_`ディレクトリをステージします:
152
151
 
153
152
  ```bash
154
153
  git add demo_
155
154
  ```
156
155
 
157
- 4. ステージしたデモファイルに対してOmamoriを実行します:
156
+ 3. ステージしたデモファイルに対してOmamoriを実行します:
158
157
 
159
158
  ```bash
160
159
  omamori scan
@@ -0,0 +1,28 @@
1
+ # This file contains vulnerabilities that AI analysis can help detect.
2
+
3
+ require 'net/http'
4
+ require 'uri'
5
+
6
+ API_KEY = "HARDCODED_SECRET_API_KEY_12345" # Hardcoded sensitive information
7
+
8
+ def fetch_data(user_input)
9
+ # Insufficient input validation
10
+ if user_input.length > 100
11
+ puts "Input too long, truncating."
12
+ user_input = user_input[0..99]
13
+ end
14
+
15
+ uri = URI("https://api.example.com/data?query=#{user_input}&api_key=#{API_KEY}")
16
+ response = Net::HTTP.get_response(uri)
17
+
18
+ if response.is_a?(Net::HTTPSuccess)
19
+ puts "Data fetched successfully: #{response.body}"
20
+ else
21
+ # Poor error handling - reveals internal details
22
+ puts "Error fetching data: #{response.code} - #{response.message}"
23
+ end
24
+ end
25
+
26
+ # Example usage
27
+ # fetch_data("some data")
28
+ # fetch_data("a" * 200) # Long input
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sinatra'
4
+
5
+ # CSRF (Cross-Site Request Forgery) の脆弱性を含むデモコード
6
+ # フォーム送信時にCSRFトークンによる検証を行っていない例
7
+
8
+ # ユーザー情報を更新する想定のPOSTエンドポイント
9
+ post '/update_profile' do
10
+ # 本来はここでCSRFトークンの検証が必要だが、省略されている
11
+ user_id = params['user_id']
12
+ new_email = params['email']
13
+
14
+ # ユーザー情報の更新処理 (実際には行わない)
15
+ puts "ユーザー #{user_id} のメールアドレスを #{new_email} に更新しました。"
16
+
17
+ "Profile updated for user #{user_id}."
18
+ end
19
+
20
+ # 実行方法:
21
+ # 1. このファイルを保存
22
+ # 2. ターミナルで `ruby demo/csrf_vulnerability.rb` を実行
23
+ # 3. 攻撃者は、このエンドポイントへのPOSTリクエストをユーザーに意図せず実行させるような細工を施したページを作成し、ユーザーを誘導する。
24
+ # 例えば、以下のようなHTMLを含むページを別のサイトに用意する:
25
+ # <form action="http://localhost:4567/update_profile" method="post">
26
+ # <input type="hidden" name="user_id" value="123">
27
+ # <input type="hidden" name="email" value="attacker@example.com">
28
+ # <input type="submit" value="Click me!">
29
+ # </form>
30
+ # または、JavaScriptを使って自動的にPOSTリクエストを送信させる。
31
+ # ユーザーがログインした状態でこのページを閲覧すると、意図せずプロファイルが更新される可能性がある。
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sinatra'
4
+
5
+ # 危険な eval/動的コード実行の脆弱性を含むデモコード
6
+ # ユーザーからの入力を eval で直接評価している例
7
+
8
+ get '/calculate' do
9
+ # ユーザーからの入力 (expression) を取得
10
+ expression = params['expression']
11
+
12
+ # 取得した入力を eval で評価
13
+ # ここにコードインジェクションの脆弱性がある
14
+ # 攻撃者は任意のRubyコードを実行させることが可能になる
15
+ begin
16
+ result = eval(expression)
17
+ "Result: #{result}"
18
+ rescue StandardError => e
19
+ status 500
20
+ "Error: #{e.message}"
21
+ end
22
+ end
23
+
24
+ # 実行方法:
25
+ # 1. このファイルを保存
26
+ # 2. ターミナルで `ruby demo/eval_vulnerability.rb` を実行
27
+ # 3. ブラウザで `http://localhost:4567/calculate?expression=2%2B2` にアクセスすると "Result: 4" が表示される。
28
+ # 4. 悪意のある入力を与える例: `http://localhost:4567/calculate?expression=system('ls%20-l')`
29
+ # サーバー側で `ls -l` コマンドが実行されてしまう可能性がある。
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sinatra'
4
+
5
+ # IDOR (Insecure Direct Object Reference) の脆弱性を含むデモコード
6
+ # ユーザーからの入力(ID)を直接使用してリソースにアクセスし、認可チェックを行っていない例
7
+
8
+ # ユーザー情報を表示する想定のエンドポイント
9
+ get '/user_info/:user_id' do
10
+ user_id = params['user_id']
11
+
12
+ # 本来はここで、リクエストを行ったユーザーが、指定された user_id の情報にアクセスする権限があるかチェックが必要だが、省略されている
13
+ user_data = fetch_user_data(user_id) # ユーザーIDに基づいてデータを取得する関数を想定
14
+
15
+ if user_data
16
+ "User Info for ID #{user_id}: #{user_data}"
17
+ else
18
+ status 404
19
+ "User not found."
20
+ end
21
+ end
22
+
23
+ # ダミーのユーザーデータ取得関数
24
+ def fetch_user_data(user_id)
25
+ # 実際にはデータベースなどからデータを取得する
26
+ users = {
27
+ '101' => 'Alice',
28
+ '102' => 'Bob',
29
+ '103' => 'Charlie'
30
+ }
31
+ users[user_id]
32
+ end
33
+
34
+ # 実行方法:
35
+ # 1. このファイルを保存
36
+ # 2. ターミナルで `ruby demo/idor_vulnerability.rb` を実行
37
+ # 3. ブラウザで `http://localhost:4567/user_info/101` にアクセスすると Alice の情報が表示される。
38
+ # 4. ログインしていない、または権限のないユーザーが `http://localhost:4567/user_info/102` にアクセスすると、
39
+ # 本来アクセス権限がないはずの Bob の情報が表示されてしまう可能性がある。
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sinatra'
4
+
5
+ # 不適切なクッキー属性(HttpOnly, Secure, SameSite 未設定)の脆弱性を含むデモコード
6
+ # セキュリティ関連の属性が設定されていないクッキーを発行する例
7
+
8
+ # ログイン成功時にセッションクッキーを発行する想定のエンドポイント
9
+ get '/login' do
10
+ user_id = params['user_id'] # ダミーのユーザーID取得
11
+
12
+ # セッションIDをクッキーに設定
13
+ # HttpOnly, Secure, SameSite 属性が設定されていない
14
+ # これにより、XSS攻撃によるクッキー情報の窃盗や、CSRF攻撃のリスクが高まる
15
+ response.set_cookie('session_id', value: "user_#{user_id}_#{Time.now.to_i}")
16
+
17
+ "Logged in as user #{user_id}. Session cookie set."
18
+ end
19
+
20
+ # 実行方法:
21
+ # 1. このファイルを保存
22
+ # 2. ターミナルで `ruby demo/insecure_cookie_vulnerability.rb` を実行
23
+ # 3. ブラウザで `http://localhost:4567/login?user_id=test_user` にアクセス
24
+ # 開発者ツールなどでクッキーを確認すると、session_id クッキーに HttpOnly, Secure, SameSite 属性が付与されていないことがわかる。
25
+ # HTTPSでアクセスした場合でもSecure属性が付かない。
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sinatra'
4
+
5
+ # オープンリダイレクトの脆弱性を含むデモコード
6
+ # ユーザーからの入力(URL)を検証せずにリダイレクト先に指定している例
7
+
8
+ get '/redirect' do
9
+ # ユーザーからの入力 (url) を取得
10
+ redirect_url = params['url']
11
+
12
+ # 取得した入力をそのままリダイレクト先に指定
13
+ # ここにオープンリダイレクトの脆弱性がある
14
+ redirect redirect_url
15
+ end
16
+
17
+ # 実行方法:
18
+ # 1. このファイルを保存
19
+ # 2. ターミナルで `ruby demo/open_redirect_vulnerability.rb` を実行
20
+ # 3. ブラウザで `http://localhost:4567/redirect?url=https://malicious-site.example.com` にアクセス
21
+ # 悪意のあるサイトにリダイレクトされてしまう。
22
+ # フィッシング詐欺などに悪用される可能性がある。
@@ -0,0 +1,18 @@
1
+ # This file contains a vulnerability detectable by static analysis tools like Brakeman.
2
+
3
+ require 'sqlite3'
4
+
5
+ def find_user(username)
6
+ db = SQLite3::Database.open 'users.db'
7
+ # Vulnerable to SQL injection
8
+ query = "SELECT * FROM users WHERE username = '#{username}'"
9
+ puts "Executing query: #{query}"
10
+ db.execute query
11
+ rescue SQLite3::Exception => e
12
+ puts "Exception occurred: #{e}"
13
+ ensure
14
+ db.close if db
15
+ end
16
+
17
+ # Example usage (vulnerable)
18
+ # find_user("' OR '1'='1")
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'sinatra'
4
+
5
+ # XSS (Cross-Site Scripting) の脆弱性を含むデモコード
6
+ # ユーザーからの入力を適切にエスケープせずにHTMLに出力している例
7
+
8
+ get '/greet' do
9
+ # ユーザーからの入力 (name) を取得
10
+ name = params['name']
11
+
12
+ # 取得した入力をそのままHTMLに埋め込んで出力
13
+ # ここにXSSの脆弱性がある
14
+ "<h1>Hello, #{name}!</h1>"
15
+ end
16
+
17
+ # 実行方法:
18
+ # 1. このファイルを保存
19
+ # 2. ターミナルで `ruby demo/xss_vulnerability.rb` を実行
20
+ # 3. ブラウザで `http://localhost:4567/greet?name=<script>alert('XSS')</script>` にアクセス
21
+ # アラートが表示されれば脆弱性がある
@@ -413,8 +413,8 @@ module Omamori
413
413
  # bundler_audit:
414
414
  # options: "--quiet" # Additional Bundler-Audit options
415
415
 
416
- # Language setting for AI analysis details (optional, default: en)
417
- # language: ja
416
+ # Language setting for AI analysis details (optional, default: en)
417
+ # language: ja
418
418
 
419
419
  YAML
420
420
  # TODO: Specify output file path from options
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Omamori
4
- VERSION = "0.1.0"
4
+ VERSION = "0.1.1"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omamori
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - rira100000000
@@ -130,6 +130,14 @@ files:
130
130
  - demo/open_redirect_vulnerability.rb
131
131
  - demo/static_analysis_vulnerability.rb
132
132
  - demo/xss_vulnerability.rb
133
+ - demo_/ai_analysis_vulnerability.rb
134
+ - demo_/csrf_vulnerability.rb
135
+ - demo_/eval_vulnerability.rb
136
+ - demo_/idor_vulnerability.rb
137
+ - demo_/insecure_cookie_vulnerability.rb
138
+ - demo_/open_redirect_vulnerability.rb
139
+ - demo_/static_analysis_vulnerability.rb
140
+ - demo_/xss_vulnerability.rb
133
141
  - exe/omamori
134
142
  - lib/omamori.rb
135
143
  - lib/omamori/ai_analysis_engine/diff_splitter.rb