aikido-zen 1.0.2.beta.9-arm64-linux → 1.0.3-arm64-linux

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.
Files changed (49) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -0
  3. data/docs/config.md +9 -1
  4. data/docs/troubleshooting.md +62 -0
  5. data/lib/aikido/zen/agent.rb +2 -2
  6. data/lib/aikido/zen/attack.rb +8 -6
  7. data/lib/aikido/zen/attack_wave/helpers.rb +457 -0
  8. data/lib/aikido/zen/attack_wave.rb +88 -0
  9. data/lib/aikido/zen/cache.rb +91 -0
  10. data/lib/aikido/zen/capped_collections.rb +22 -4
  11. data/lib/aikido/zen/collector/event.rb +29 -0
  12. data/lib/aikido/zen/collector/hosts.rb +16 -1
  13. data/lib/aikido/zen/collector/stats.rb +17 -3
  14. data/lib/aikido/zen/collector/users.rb +2 -2
  15. data/lib/aikido/zen/collector.rb +14 -0
  16. data/lib/aikido/zen/config.rb +35 -6
  17. data/lib/aikido/zen/context/rack_request.rb +3 -0
  18. data/lib/aikido/zen/context/rails_request.rb +3 -0
  19. data/lib/aikido/zen/context.rb +42 -11
  20. data/lib/aikido/zen/event.rb +47 -2
  21. data/lib/aikido/zen/helpers.rb +24 -0
  22. data/lib/aikido/zen/middleware/{check_allowed_addresses.rb → allowed_address_checker.rb} +1 -1
  23. data/lib/aikido/zen/middleware/attack_protector.rb +29 -0
  24. data/lib/aikido/zen/middleware/attack_wave_protector.rb +46 -0
  25. data/lib/aikido/zen/middleware/{set_context.rb → context_setter.rb} +1 -1
  26. data/lib/aikido/zen/middleware/rack_throttler.rb +3 -1
  27. data/lib/aikido/zen/middleware/request_tracker.rb +8 -3
  28. data/lib/aikido/zen/outbound_connection.rb +11 -1
  29. data/lib/aikido/zen/rails_engine.rb +4 -2
  30. data/lib/aikido/zen/request/rails_router.rb +17 -2
  31. data/lib/aikido/zen/request.rb +2 -36
  32. data/lib/aikido/zen/route.rb +50 -0
  33. data/lib/aikido/zen/runtime_settings/endpoints.rb +37 -8
  34. data/lib/aikido/zen/runtime_settings.rb +5 -4
  35. data/lib/aikido/zen/scanners/path_traversal_scanner.rb +3 -2
  36. data/lib/aikido/zen/scanners/shell_injection_scanner.rb +3 -2
  37. data/lib/aikido/zen/scanners/sql_injection_scanner.rb +3 -2
  38. data/lib/aikido/zen/scanners/ssrf_scanner.rb +2 -1
  39. data/lib/aikido/zen/scanners/stored_ssrf_scanner.rb +5 -1
  40. data/lib/aikido/zen/sinks/action_controller.rb +3 -1
  41. data/lib/aikido/zen/sinks/file.rb +34 -32
  42. data/lib/aikido/zen/sinks/pg.rb +14 -5
  43. data/lib/aikido/zen/sinks/socket.rb +7 -0
  44. data/lib/aikido/zen/sinks.rb +1 -0
  45. data/lib/aikido/zen/system_info.rb +1 -5
  46. data/lib/aikido/zen/version.rb +1 -1
  47. data/lib/aikido/zen.rb +56 -6
  48. data/tasklib/bench.rake +1 -1
  49. metadata +11 -4
@@ -8,12 +8,8 @@ require_relative "package"
8
8
  module Aikido::Zen
9
9
  # Provides information about the currently running Agent.
10
10
  class SystemInfo
11
- def initialize(config = Aikido::Zen.config)
12
- @config = config
13
- end
14
-
15
11
  def attacks_block_requests?
16
- !!@config.blocking_mode
12
+ !!Aikido::Zen.blocking_mode?
17
13
  end
18
14
 
19
15
  def attacks_are_only_reported?
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Aikido
4
4
  module Zen
5
- VERSION = "1.0.2.beta.9"
5
+ VERSION = "1.0.3"
6
6
 
7
7
  # The version of libzen_internals that we build against.
8
8
  LIBZEN_VERSION = "0.1.48"
data/lib/aikido/zen.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative "zen/helpers"
3
4
  require_relative "zen/version"
4
5
  require_relative "zen/errors"
5
6
  require_relative "zen/actor"
@@ -13,13 +14,16 @@ require_relative "zen/context"
13
14
  require_relative "zen/detached_agent"
14
15
  require_relative "zen/middleware/middleware"
15
16
  require_relative "zen/middleware/fork_detector"
16
- require_relative "zen/middleware/set_context"
17
- require_relative "zen/middleware/check_allowed_addresses"
17
+ require_relative "zen/middleware/context_setter"
18
+ require_relative "zen/middleware/allowed_address_checker"
19
+ require_relative "zen/middleware/attack_protector"
20
+ require_relative "zen/middleware/attack_wave_protector"
18
21
  require_relative "zen/middleware/request_tracker"
19
22
  require_relative "zen/outbound_connection"
20
23
  require_relative "zen/outbound_connection_monitor"
21
24
  require_relative "zen/runtime_settings"
22
25
  require_relative "zen/rate_limiter"
26
+ require_relative "zen/attack_wave"
23
27
  require_relative "zen/scanners"
24
28
 
25
29
  module Aikido
@@ -77,6 +81,16 @@ module Aikido
77
81
  @runtime_settings = settings
78
82
  end
79
83
 
84
+ # @return [Boolean] whether the Aikido agent is currently blocking requests.
85
+ # Blocking mode is configured at startup and can be controlled through the
86
+ # Aikido dashboard at runtime.
87
+ def self.blocking_mode?
88
+ blocking_mode = runtime_settings.blocking_mode
89
+ return blocking_mode unless blocking_mode.nil?
90
+
91
+ config.blocking_mode
92
+ end
93
+
80
94
  # Gets information about the current system configuration, which is sent to
81
95
  # the server along with any events.
82
96
  def self.system_info
@@ -89,10 +103,6 @@ module Aikido
89
103
  @collector ||= Collector.new
90
104
  end
91
105
 
92
- def self.detached_agent
93
- @detached_agent ||= DetachedAgent::Agent.new
94
- end
95
-
96
106
  # Gets the current context object that holds all information about the
97
107
  # current request.
98
108
  #
@@ -118,6 +128,18 @@ module Aikido
118
128
  collector.track_request
119
129
  end
120
130
 
131
+ # Track statistics about an attack wave the app is handling.
132
+ #
133
+ # @param attack_wave [Aikido::Zen::Events::AttackWave]
134
+ # @return [void]
135
+ def self.track_attack_wave(attack_wave)
136
+ collector.track_attack_wave(being_blocked: false)
137
+ end
138
+
139
+ # Track statistics about a route that the app has discovered.
140
+ #
141
+ # @param request [Aikido::Zen::Request]
142
+ # @return [void]
121
143
  def self.track_discovered_route(request)
122
144
  collector.track_route(request)
123
145
  end
@@ -173,6 +195,11 @@ module Aikido
173
195
  collector.middleware_installed!
174
196
  end
175
197
 
198
+ # @return [Aikido::Zen::AttackWave::Detector] the attack wave detector.
199
+ def self.attack_wave_detector
200
+ @attack_wave_detector ||= AttackWave::Detector.new
201
+ end
202
+
176
203
  # @!visibility private
177
204
  # Load all sources.
178
205
  #
@@ -210,6 +237,10 @@ module Aikido
210
237
  @agent ||= Agent.start
211
238
  end
212
239
 
240
+ def self.detached_agent
241
+ @detached_agent ||= DetachedAgent::Agent.new
242
+ end
243
+
213
244
  def self.detached_agent_server
214
245
  @detached_agent_server ||= DetachedAgent::Server.start
215
246
  end
@@ -250,5 +281,24 @@ module Aikido
250
281
  @detached_agent&.handle_fork
251
282
  end
252
283
  end
284
+
285
+ # @!visibility private
286
+ # Returns the stack trace trimmed to where execution last entered Zen.
287
+ #
288
+ # @return [String]
289
+ def self.clean_stack_trace
290
+ stack_trace = caller_locations
291
+
292
+ spec = Gem.loaded_specs["aikido-zen"]
293
+
294
+ # Only trim stack frames from .../lib/aikido/zen/ in the aikido-zen gem,
295
+ # so calls in sample apps are preserved.
296
+ lib_path_start = File.expand_path(File.join(spec.full_gem_path, "lib", "aikido", "zen")) + File::SEPARATOR
297
+
298
+ index = stack_trace.index { |frame| !File.expand_path(frame.path).start_with?(lib_path_start) }
299
+ stack_trace = stack_trace[index..] if index
300
+
301
+ stack_trace.map(&:to_s).join("\n")
302
+ end
253
303
  end
254
304
  end
data/tasklib/bench.rake CHANGED
@@ -87,7 +87,7 @@ Pathname.glob("sample_apps/*").select(&:directory?).each do |dir|
87
87
  end
88
88
 
89
89
  task :boot_unprotected_app do
90
- boot_server(dir, port: PORT_UNPROTECTED, env: {"AIKIDO_DISABLED" => "true"})
90
+ boot_server(dir, port: PORT_UNPROTECTED, env: {"AIKIDO_DISABLE" => "true"})
91
91
  end
92
92
  end
93
93
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: aikido-zen
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2.beta.9
4
+ version: 1.0.3
5
5
  platform: arm64-linux
6
6
  authors:
7
7
  - Aikido Security
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-10-28 00:00:00.000000000 Z
11
+ date: 2025-12-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: concurrent-ruby
@@ -77,6 +77,7 @@ files:
77
77
  - docs/config.md
78
78
  - docs/proxy.md
79
79
  - docs/rails.md
80
+ - docs/troubleshooting.md
80
81
  - lib/aikido-zen.rb
81
82
  - lib/aikido/zen.rb
82
83
  - lib/aikido/zen/actor.rb
@@ -84,7 +85,10 @@ files:
84
85
  - lib/aikido/zen/agent/heartbeats_manager.rb
85
86
  - lib/aikido/zen/api_client.rb
86
87
  - lib/aikido/zen/attack.rb
88
+ - lib/aikido/zen/attack_wave.rb
89
+ - lib/aikido/zen/attack_wave/helpers.rb
87
90
  - lib/aikido/zen/background_worker.rb
91
+ - lib/aikido/zen/cache.rb
88
92
  - lib/aikido/zen/capped_collections.rb
89
93
  - lib/aikido/zen/collector.rb
90
94
  - lib/aikido/zen/collector/event.rb
@@ -103,14 +107,17 @@ files:
103
107
  - lib/aikido/zen/detached_agent/server.rb
104
108
  - lib/aikido/zen/errors.rb
105
109
  - lib/aikido/zen/event.rb
110
+ - lib/aikido/zen/helpers.rb
106
111
  - lib/aikido/zen/internals.rb
107
112
  - lib/aikido/zen/libzen-v0.1.48-arm64-linux.so
108
- - lib/aikido/zen/middleware/check_allowed_addresses.rb
113
+ - lib/aikido/zen/middleware/allowed_address_checker.rb
114
+ - lib/aikido/zen/middleware/attack_protector.rb
115
+ - lib/aikido/zen/middleware/attack_wave_protector.rb
116
+ - lib/aikido/zen/middleware/context_setter.rb
109
117
  - lib/aikido/zen/middleware/fork_detector.rb
110
118
  - lib/aikido/zen/middleware/middleware.rb
111
119
  - lib/aikido/zen/middleware/rack_throttler.rb
112
120
  - lib/aikido/zen/middleware/request_tracker.rb
113
- - lib/aikido/zen/middleware/set_context.rb
114
121
  - lib/aikido/zen/outbound_connection.rb
115
122
  - lib/aikido/zen/outbound_connection_monitor.rb
116
123
  - lib/aikido/zen/package.rb