libddwaf 1.2.1.0.0.beta1-arm64-darwin → 1.3.0.1.0-arm64-darwin
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 +4 -4
- data/lib/datadog/appsec/waf/version.rb +2 -2
- data/lib/datadog/appsec/waf.rb +51 -11
- data/vendor/libddwaf/{libddwaf-1.2.1-darwin-arm64 → libddwaf-1.3.0-darwin-arm64}/include/ddwaf.h +18 -6
- data/vendor/libddwaf/libddwaf-1.3.0-darwin-arm64/lib/libddwaf.dylib +0 -0
- metadata +4 -4
- data/vendor/libddwaf/libddwaf-1.2.1-darwin-arm64/lib/libddwaf.dylib +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a691170b9bdc4e23f2e430785add53f2c0f41b9a429a6c13a8428c0285b2a974
|
4
|
+
data.tar.gz: 046b526ed58dc6d5c0abf55255642061a766b539e2e91d94a8a02ee7587080b5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 623f671fa1116b9d8dc4a6413723cc93c5eefe606eeaf11e10ab77d0b72f3c6b98c87ca0f8f1ba6acf9b050c5c46251c96d9a7ab5412ea60a0b4dc1ec7e6f69e
|
7
|
+
data.tar.gz: 475c973188acc9af9c3dce51352d35efeeb24c8fddb240e1ca3153be60a0caa6a02419dd02decaf4015bd67f55a502c03d7cb57505fafa434af26f83e32f1cfc
|
data/lib/datadog/appsec/waf.rb
CHANGED
@@ -6,7 +6,13 @@ module Datadog
|
|
6
6
|
module AppSec
|
7
7
|
module WAF
|
8
8
|
module LibDDWAF
|
9
|
-
class Error < StandardError
|
9
|
+
class Error < StandardError
|
10
|
+
attr_reader :ruleset_info
|
11
|
+
|
12
|
+
def initialize(msg, ruleset_info: nil)
|
13
|
+
@ruleset_info = ruleset_info
|
14
|
+
end
|
15
|
+
end
|
10
16
|
|
11
17
|
extend ::FFI::Library
|
12
18
|
|
@@ -151,8 +157,19 @@ module Datadog
|
|
151
157
|
typedef Object.by_ref, :ddwaf_rule
|
152
158
|
|
153
159
|
class Config < ::FFI::Struct
|
154
|
-
|
155
|
-
|
160
|
+
class Limits < ::FFI::Struct
|
161
|
+
layout :max_container_size, :uint32,
|
162
|
+
:max_container_depth, :uint32,
|
163
|
+
:max_string_length, :uint32
|
164
|
+
end
|
165
|
+
|
166
|
+
class Obfuscator < ::FFI::Struct
|
167
|
+
layout :key_regex, :pointer, # :charptr
|
168
|
+
:value_regex, :pointer # :charptr
|
169
|
+
end
|
170
|
+
|
171
|
+
layout :limits, Limits,
|
172
|
+
:obfuscator, Obfuscator
|
156
173
|
end
|
157
174
|
|
158
175
|
typedef Config.by_ref, :ddwaf_config
|
@@ -172,7 +189,7 @@ module Datadog
|
|
172
189
|
attach_function :ddwaf_init, [:ddwaf_rule, :ddwaf_config, :ddwaf_ruleset_info], :ddwaf_handle
|
173
190
|
attach_function :ddwaf_destroy, [:ddwaf_handle], :void
|
174
191
|
|
175
|
-
attach_function :ddwaf_required_addresses, [:ddwaf_handle,
|
192
|
+
attach_function :ddwaf_required_addresses, [:ddwaf_handle, UInt32Ptr], :charptrptr
|
176
193
|
|
177
194
|
# running
|
178
195
|
|
@@ -339,10 +356,13 @@ module Datadog
|
|
339
356
|
class Handle
|
340
357
|
attr_reader :handle_obj
|
341
358
|
|
342
|
-
|
343
|
-
|
359
|
+
DEFAULT_MAX_CONTAINER_SIZE = 0
|
360
|
+
DEFAULT_MAX_CONTAINER_DEPTH = 0
|
361
|
+
DEFAULT_MAX_STRING_LENGTH = 0
|
344
362
|
|
345
|
-
|
363
|
+
attr_reader :ruleset_info
|
364
|
+
|
365
|
+
def initialize(rule, limits: {}, obfuscator: {})
|
346
366
|
rule_obj = Datadog::AppSec::WAF.ruby_to_object(rule)
|
347
367
|
if rule_obj.null? || rule_obj[:type] == :ddwaf_object_invalid
|
348
368
|
fail LibDDWAF::Error, "Could not convert object #{rule.inspect}"
|
@@ -353,14 +373,25 @@ module Datadog
|
|
353
373
|
fail LibDDWAF::Error, 'Could not create config struct'
|
354
374
|
end
|
355
375
|
|
356
|
-
config_obj[:
|
357
|
-
config_obj[:
|
376
|
+
config_obj[:limits][:max_container_size] = limits[:max_container_size] || DEFAULT_MAX_CONTAINER_SIZE
|
377
|
+
config_obj[:limits][:max_container_depth] = limits[:max_container_depth] || DEFAULT_MAX_CONTAINER_DEPTH
|
378
|
+
config_obj[:limits][:max_string_length] = limits[:max_string_length] || DEFAULT_MAX_STRING_LENGTH
|
379
|
+
config_obj[:obfuscator][:key_regex] = FFI::MemoryPointer.from_string(obfuscator[:key_regex]) if obfuscator[:key_regex]
|
380
|
+
config_obj[:obfuscator][:value_regex] = FFI::MemoryPointer.from_string(obfuscator[:value_regex]) if obfuscator[:value_regex]
|
358
381
|
|
359
|
-
ruleset_info = LibDDWAF::
|
382
|
+
ruleset_info = LibDDWAF::RuleSetInfo.new
|
360
383
|
|
361
384
|
@handle_obj = Datadog::AppSec::WAF::LibDDWAF.ddwaf_init(rule_obj, config_obj, ruleset_info)
|
385
|
+
|
386
|
+
@ruleset_info = {
|
387
|
+
loaded: ruleset_info[:loaded],
|
388
|
+
failed: ruleset_info[:failed],
|
389
|
+
errors: WAF.object_to_ruby(ruleset_info[:errors]),
|
390
|
+
version: ruleset_info[:version],
|
391
|
+
}
|
392
|
+
|
362
393
|
if @handle_obj.null?
|
363
|
-
fail LibDDWAF::Error
|
394
|
+
fail LibDDWAF::Error.new('Could not create handle', ruleset_info: @ruleset_info)
|
364
395
|
end
|
365
396
|
|
366
397
|
ObjectSpace.define_finalizer(self, Handle.finalizer(handle_obj))
|
@@ -374,6 +405,15 @@ module Datadog
|
|
374
405
|
Datadog::AppSec::WAF::LibDDWAF.ddwaf_destroy(handle_obj)
|
375
406
|
end
|
376
407
|
end
|
408
|
+
|
409
|
+
def required_addresses
|
410
|
+
count = Datadog::AppSec::WAF::LibDDWAF::UInt32Ptr.new
|
411
|
+
list = Datadog::AppSec::WAF::LibDDWAF.ddwaf_required_addresses(handle_obj, count)
|
412
|
+
|
413
|
+
return [] if count == 0 # list is null
|
414
|
+
|
415
|
+
list.get_array_of_string(0, count[:value])
|
416
|
+
end
|
377
417
|
end
|
378
418
|
|
379
419
|
Result = Struct.new(:action, :data, :total_runtime, :timeout)
|
data/vendor/libddwaf/{libddwaf-1.2.1-darwin-arm64 → libddwaf-1.3.0-darwin-arm64}/include/ddwaf.h
RENAMED
@@ -17,8 +17,8 @@ extern "C"
|
|
17
17
|
#include <stddef.h>
|
18
18
|
|
19
19
|
#define DDWAF_MAX_STRING_LENGTH 4096
|
20
|
-
#define
|
21
|
-
#define
|
20
|
+
#define DDWAF_MAX_CONTAINER_DEPTH 20
|
21
|
+
#define DDWAF_MAX_CONTAINER_SIZE 256
|
22
22
|
#define DDWAF_RUN_TIMEOUT 5000
|
23
23
|
|
24
24
|
/**
|
@@ -114,10 +114,22 @@ struct _ddwaf_object
|
|
114
114
|
**/
|
115
115
|
struct _ddwaf_config
|
116
116
|
{
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
117
|
+
struct {
|
118
|
+
/** Maximum size of ddwaf::object containers. */
|
119
|
+
uint32_t max_container_size;
|
120
|
+
/** Maximum depth of ddwaf::object containers. */
|
121
|
+
uint32_t max_container_depth;
|
122
|
+
/** Maximum length of ddwaf::object strings. */
|
123
|
+
uint32_t max_string_length;
|
124
|
+
} limits;
|
125
|
+
|
126
|
+
/** Obfuscator regexes - the strings are owned by the caller */
|
127
|
+
struct {
|
128
|
+
/** Regular expression for key-based obfuscation */
|
129
|
+
const char *key_regex;
|
130
|
+
/** Regular expression for value-based obfuscation */
|
131
|
+
const char *value_regex;
|
132
|
+
} obfuscator;
|
121
133
|
};
|
122
134
|
|
123
135
|
/**
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: libddwaf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0.1.0
|
5
5
|
platform: arm64-darwin
|
6
6
|
authors:
|
7
7
|
- Datadog, Inc.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-04-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -41,8 +41,8 @@ files:
|
|
41
41
|
- lib/datadog/appsec/waf.rb
|
42
42
|
- lib/datadog/appsec/waf/version.rb
|
43
43
|
- lib/libddwaf.rb
|
44
|
-
- vendor/libddwaf/libddwaf-1.
|
45
|
-
- vendor/libddwaf/libddwaf-1.
|
44
|
+
- vendor/libddwaf/libddwaf-1.3.0-darwin-arm64/include/ddwaf.h
|
45
|
+
- vendor/libddwaf/libddwaf-1.3.0-darwin-arm64/lib/libddwaf.dylib
|
46
46
|
homepage: https://github.com/DataDog/libddwaf
|
47
47
|
licenses:
|
48
48
|
- BSD-3-Clause
|
Binary file
|