rubyntlm 0.6.4 → 0.6.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/net/ntlm/encode_util.rb +1 -1
- data/lib/net/ntlm/message.rb +14 -6
- data/lib/net/ntlm/version.rb +1 -1
- data/lib/net/ntlm.rb +12 -1
- data/spec/lib/net/ntlm/message/type3_spec.rb +22 -1
- data/spec/lib/net/ntlm_spec.rb +8 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 12b18439c86b30b978043850938e3ec611230d2e0783828d6db337dfe4ea97ad
|
4
|
+
data.tar.gz: 872a21844c21c9f64815abd312156c3fcddb8ebedc5185ec128106b6714b8521
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 03df0639b70648b2db81684060ce732d46f21a392590f4995ddb4c97399036ffc8d9a47fd1460b64441a34bebdbabfbd1f3d625bf1246a9e178a0901770f0ee5
|
7
|
+
data.tar.gz: e3ff9341eb1738c501fe90d9456a8203e5771af2c459bb53f0168e24cbdd549540a0369d9a83f2864dce4fac86595cca4c7207b88f11a1b843d9fdbf52b59b20
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,10 @@
|
|
1
1
|
# Change Log
|
2
2
|
|
3
|
+
## 0.6.5 (2024-06-11)
|
4
|
+
|
5
|
+
* Update available NegotiateFlags during authentication
|
6
|
+
* Fix NTLMv2 hash when username contains non-ASCII characters by @cdelafuente-r7 in https://github.com/WinRb/rubyntlm/pull/56
|
7
|
+
|
3
8
|
## 0.6.4 (2024-06-06)
|
4
9
|
|
5
10
|
* Fix applying DES-CBC when using OpenSSL 3 by @paulvt in https://github.com/WinRb/rubyntlm/pull/51
|
data/lib/net/ntlm/encode_util.rb
CHANGED
@@ -39,7 +39,7 @@ module NTLM
|
|
39
39
|
# the function will convert the string bytes to UTF-16LE and note the encoding as UTF-8 so that byte
|
40
40
|
# concatination works seamlessly.
|
41
41
|
def self.encode_utf16le(str)
|
42
|
-
str.dup.force_encoding('UTF-8').encode(Encoding::UTF_16LE, Encoding::UTF_8).force_encoding('
|
42
|
+
str.dup.force_encoding('UTF-8').encode(Encoding::UTF_16LE, Encoding::UTF_8).force_encoding('ASCII-8BIT')
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
data/lib/net/ntlm/message.rb
CHANGED
@@ -3,28 +3,36 @@ module NTLM
|
|
3
3
|
|
4
4
|
SSP_SIGN = "NTLMSSP\0"
|
5
5
|
|
6
|
+
# See [2.2.2.5 NEGOTIATE](https://msdn.microsoft.com/en-us/library/cc236650.aspx)
|
6
7
|
FLAGS = {
|
7
8
|
:UNICODE => 0x00000001,
|
8
9
|
:OEM => 0x00000002,
|
9
10
|
:REQUEST_TARGET => 0x00000004,
|
10
|
-
:MBZ9 => 0x00000008,
|
11
11
|
:SIGN => 0x00000010,
|
12
12
|
:SEAL => 0x00000020,
|
13
13
|
:NEG_DATAGRAM => 0x00000040,
|
14
|
-
:
|
14
|
+
:NEG_LM_KEY => 0x00000080,
|
15
15
|
:NTLM => 0x00000200,
|
16
|
-
:
|
17
|
-
:MBZ7 => 0x00000800,
|
16
|
+
:NEG_ANONYMOUS => 0x00000800,
|
18
17
|
:DOMAIN_SUPPLIED => 0x00001000,
|
19
18
|
:WORKSTATION_SUPPLIED => 0x00002000,
|
20
|
-
:LOCAL_CALL => 0x00004000,
|
21
19
|
:ALWAYS_SIGN => 0x00008000,
|
22
20
|
:TARGET_TYPE_DOMAIN => 0x00010000,
|
21
|
+
:TARGET_TYPE_SERVER => 0x00020000,
|
23
22
|
:NTLM2_KEY => 0x00080000,
|
23
|
+
:NEG_IDENTIFY => 0x00100000,
|
24
|
+
:NON_NT_SESSION_KEY => 0x00400000,
|
24
25
|
:TARGET_INFO => 0x00800000,
|
26
|
+
:NEG_VERSION => 0x02000000,
|
25
27
|
:KEY128 => 0x20000000,
|
26
28
|
:KEY_EXCHANGE => 0x40000000,
|
27
|
-
:KEY56 => 0x80000000
|
29
|
+
:KEY56 => 0x80000000,
|
30
|
+
# Undocumented flags:
|
31
|
+
:MBZ9 => 0x00000008,
|
32
|
+
:NETWARE => 0x00000100,
|
33
|
+
:NEG_NT_ONLY => 0x00000400,
|
34
|
+
:MBZ7 => 0x00000800, # alias for :NEG_ANONYMOUS
|
35
|
+
:LOCAL_CALL => 0x00004000,
|
28
36
|
}.freeze
|
29
37
|
|
30
38
|
FLAG_KEYS = FLAGS.keys.sort{|a, b| FLAGS[a] <=> FLAGS[b] }
|
data/lib/net/ntlm/version.rb
CHANGED
data/lib/net/ntlm.rb
CHANGED
@@ -166,7 +166,18 @@ module Net
|
|
166
166
|
else
|
167
167
|
ntlmhash = ntlm_hash(password, opt)
|
168
168
|
end
|
169
|
-
|
169
|
+
|
170
|
+
if opt[:unicode]
|
171
|
+
# Uppercase operation on username containing non-ASCI characters
|
172
|
+
# after behing unicode encoded with `EncodeUtil.encode_utf16le`
|
173
|
+
# doesn't play well. Upcase should be done before encoding.
|
174
|
+
user_upcase = EncodeUtil.decode_utf16le(user).upcase
|
175
|
+
user_upcase = EncodeUtil.encode_utf16le(user_upcase)
|
176
|
+
else
|
177
|
+
user_upcase = user.upcase
|
178
|
+
end
|
179
|
+
userdomain = user_upcase + target
|
180
|
+
|
170
181
|
unless opt[:unicode]
|
171
182
|
userdomain = EncodeUtil.encode_utf16le(userdomain)
|
172
183
|
end
|
@@ -222,7 +222,28 @@ describe Net::NTLM::Message::Type3 do
|
|
222
222
|
|
223
223
|
end
|
224
224
|
|
225
|
-
describe '
|
225
|
+
describe '#serialize' do
|
226
|
+
context 'when the username contains non-ASCI characters' do
|
227
|
+
let(:t3) {
|
228
|
+
t2 = Net::NTLM::Message::Type2.new
|
229
|
+
t2.response(
|
230
|
+
{
|
231
|
+
:user => 'Hélène',
|
232
|
+
:password => '123456',
|
233
|
+
:domain => ''
|
234
|
+
},
|
235
|
+
{
|
236
|
+
:ntlmv2 => true,
|
237
|
+
:workstation => 'testlab.local'
|
238
|
+
}
|
239
|
+
)
|
240
|
+
}
|
241
|
+
|
242
|
+
it 'serializes without error' do
|
243
|
+
expect { t3.serialize }.not_to raise_error
|
244
|
+
end
|
245
|
+
end
|
246
|
+
|
226
247
|
subject(:message) { described_class.create(opts) }
|
227
248
|
context 'with the UNICODE flag set' do
|
228
249
|
let(:opts) { {lm_response: "\x00".b, ntlm_response: '', domain: '', workstation: '', user: '', flag: Net::NTLM::DEFAULT_FLAGS[:TYPE3] | Net::NTLM::FLAGS[:UNICODE] } }
|
data/spec/lib/net/ntlm_spec.rb
CHANGED
@@ -59,6 +59,14 @@ describe Net::NTLM do
|
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
62
|
+
context 'when the username contains non-ASCI characters' do
|
63
|
+
let(:user) { 'юзер' }
|
64
|
+
|
65
|
+
it 'should return the correct ntlmv2 hash' do
|
66
|
+
expect(Net::NTLM::ntlmv2_hash(user, passwd, domain, { unicode: true })).to eq(["a0f4b914a37faeaee884b6b04a20faf0"].pack("H*"))
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
62
70
|
it 'should generate an lm_response' do
|
63
71
|
expect(Net::NTLM::lm_response(
|
64
72
|
{
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubyntlm
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.6.
|
4
|
+
version: 0.6.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kohei Kajimoto
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2024-06-
|
12
|
+
date: 2024-06-12 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: github_changelog_generator
|