sitecore_scan 0.0.3 → 0.0.4
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/bin/sitecore-scan +8 -10
- data/lib/sitecore_scan.rb +58 -3
- metadata +9 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b678037d9c8815435b9e010914c27478105b0edb7b5d3c894cfb1fccb7cb3107
|
4
|
+
data.tar.gz: 7da2e224e3427c8e9f8f34b42acc1970e5ccfd3ccfccbd7e27b956e53a1efdf7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 487fb1c72d1adf02654b5b22d887bc0d1774f5521ff299c04dfbf8f57e2ecf819bcc2cc732bef59bad37cf1c026bbe701716432c0d67c793ec2717768aa3ac85
|
7
|
+
data.tar.gz: ae6bb06f1925ab086b744ea4cd46768028a95af647da39c240cc64a8d59b5bd569044fe338f2a9d2e6f7473622054cdec110d0004a23195dca7ed319a58a2582
|
data/bin/sitecore-scan
CHANGED
@@ -93,8 +93,7 @@ def scan(url, check: true, insecure: false, verbose: false)
|
|
93
93
|
|
94
94
|
# Check if the URL is Sitecore
|
95
95
|
if check
|
96
|
-
|
97
|
-
unless is_sitecore
|
96
|
+
unless SitecoreScan::detectSitecore(url)
|
98
97
|
puts '- Sitecore not found'
|
99
98
|
exit(1)
|
100
99
|
end
|
@@ -106,20 +105,19 @@ def scan(url, check: true, insecure: false, verbose: false)
|
|
106
105
|
puts "+ Version: #{version}" if version
|
107
106
|
|
108
107
|
# Check if Glimpse debugging is enabled
|
109
|
-
|
110
|
-
puts "+ Glimpse debugging is enabled" if glimpse
|
108
|
+
puts "+ Glimpse debugging is enabled" if SitecoreScan::glimpseDebugging(url)
|
111
109
|
|
112
110
|
# Check if SOAP API is accessible
|
113
|
-
|
114
|
-
|
111
|
+
puts "+ SOAP API is available" if SitecoreScan::soapApi(url)
|
112
|
+
|
113
|
+
# Check if MVC Device Simulator allows file disclosure
|
114
|
+
puts "+ MVC Device Simulator allows file disclosure" if SitecoreScan::mvcDeviceSimulatorFileDisclosure(url)
|
115
115
|
|
116
116
|
# Check if Executive Insight Dashboard reporting is accessible
|
117
|
-
reporting
|
118
|
-
puts "+ Executive Insight Dashboard reporting is available" if reporting
|
117
|
+
puts "+ Executive Insight Dashboard reporting is available" if SitecoreScan::dashboardReporting(url)
|
119
118
|
|
120
119
|
# Check if Telerik Web UI is accessible
|
121
|
-
|
122
|
-
puts "+ Telerik Web Ui is available" if telerik
|
120
|
+
puts "+ Telerik Web Ui is available" if SitecoreScan::telerikWebUi(url)
|
123
121
|
|
124
122
|
puts "Scan finished at #{Time.now.getutc}"
|
125
123
|
puts '-' * 60
|
data/lib/sitecore_scan.rb
CHANGED
@@ -11,7 +11,7 @@ require 'openssl'
|
|
11
11
|
require 'stringio'
|
12
12
|
|
13
13
|
class SitecoreScan
|
14
|
-
VERSION = '0.0.
|
14
|
+
VERSION = '0.0.4'.freeze
|
15
15
|
|
16
16
|
def self.logger
|
17
17
|
@logger
|
@@ -30,13 +30,27 @@ class SitecoreScan
|
|
30
30
|
end
|
31
31
|
|
32
32
|
#
|
33
|
-
# Check if URL is running Sitecore
|
33
|
+
# Check if URL is running Sitecore
|
34
34
|
#
|
35
35
|
# @param [String] URL
|
36
36
|
#
|
37
37
|
# @return [Boolean]
|
38
38
|
#
|
39
39
|
def self.detectSitecore(url)
|
40
|
+
return true if detectSitecoreEditMode(url)
|
41
|
+
return true if detectSitecoreErrorRedirect(url)
|
42
|
+
|
43
|
+
false
|
44
|
+
end
|
45
|
+
|
46
|
+
#
|
47
|
+
# Check if URL is running Sitecore using edit mode
|
48
|
+
#
|
49
|
+
# @param [String] URL
|
50
|
+
#
|
51
|
+
# @return [Boolean]
|
52
|
+
#
|
53
|
+
def self.detectSitecoreEditMode(url)
|
40
54
|
url += '/' unless url.to_s.end_with? '/'
|
41
55
|
res = sendHttpRequest("#{url}?sc_mode=edit")
|
42
56
|
|
@@ -49,6 +63,25 @@ class SitecoreScan
|
|
49
63
|
false
|
50
64
|
end
|
51
65
|
|
66
|
+
#
|
67
|
+
# Check if URL is running Sitecore using error redirect
|
68
|
+
#
|
69
|
+
# @param [String] URL
|
70
|
+
#
|
71
|
+
# @return [Boolean]
|
72
|
+
#
|
73
|
+
def self.detectSitecoreErrorRedirect(url)
|
74
|
+
url += '/' unless url.to_s.end_with? '/'
|
75
|
+
res = sendHttpRequest("#{url}#{('a'..'z').to_a.shuffle[0,8].join}.aspx")
|
76
|
+
|
77
|
+
return false unless res
|
78
|
+
|
79
|
+
return true if res['sitecore-item']
|
80
|
+
return true if res.code.to_i == 302 && res['location'].to_s.downcase.include?('sitecore/service/notfound.aspx')
|
81
|
+
|
82
|
+
false
|
83
|
+
end
|
84
|
+
|
52
85
|
#
|
53
86
|
# Retrieve Sitecore version from Login page
|
54
87
|
#
|
@@ -109,6 +142,28 @@ class SitecoreScan
|
|
109
142
|
true
|
110
143
|
end
|
111
144
|
|
145
|
+
#
|
146
|
+
# Check if MVC Device Simulator allows file disclosure (SC2023-001-568150)
|
147
|
+
# https://support.sitecore.com/kb?id=kb_article_view&sysparm_article=KB1002925
|
148
|
+
# https://blog.assetnote.io/2023/05/10/sitecore-round-two/
|
149
|
+
#
|
150
|
+
# @param [String] URL
|
151
|
+
#
|
152
|
+
# @return [Boolean]
|
153
|
+
#
|
154
|
+
def self.mvcDeviceSimulatorFileDisclosure(url)
|
155
|
+
url += '/' unless url.to_s.end_with? '/'
|
156
|
+
res = sendHttpRequest("#{url}api/sitecore/Sitecore.Mvc.DeviceSimulator.Controllers.SimulatorController,Sitecore.Mvc.DeviceSimulator.dll/Preview?previewPath=/App_Data/license.xml")
|
157
|
+
|
158
|
+
return false unless res
|
159
|
+
return false unless res.code.to_i == 200
|
160
|
+
return false unless res.body.to_s.include?('<?xml')
|
161
|
+
return false unless res.body.to_s.include?('sitecore')
|
162
|
+
return false unless res.body.to_s.include?('signedlicense')
|
163
|
+
|
164
|
+
true
|
165
|
+
end
|
166
|
+
|
112
167
|
#
|
113
168
|
# Check if Executive Insight Dashboard reporting is accessible (CVE-2021-42237)
|
114
169
|
# https://support.sitecore.com/kb?id=kb_article_view&sysparm_article=KB1000776
|
@@ -123,7 +178,7 @@ class SitecoreScan
|
|
123
178
|
|
124
179
|
return false unless res
|
125
180
|
return false unless res.code.to_i == 200
|
126
|
-
return false unless res.body.to_s.include?
|
181
|
+
return false unless res.body.to_s.include?('Sitecore.Analytics.Reporting')
|
127
182
|
|
128
183
|
true
|
129
184
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sitecore_scan
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Brendan Coles
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-05-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: logger
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.6'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.6'
|
27
27
|
description: A simple remote scanner for Sitecore CMS
|
28
28
|
email: bcoles@gmail.com
|
29
29
|
executables:
|
@@ -37,7 +37,7 @@ homepage: https://github.com/bcoles/sitecore_scan
|
|
37
37
|
licenses:
|
38
38
|
- MIT
|
39
39
|
metadata: {}
|
40
|
-
post_install_message:
|
40
|
+
post_install_message:
|
41
41
|
rdoc_options: []
|
42
42
|
require_paths:
|
43
43
|
- lib
|
@@ -45,15 +45,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
45
45
|
requirements:
|
46
46
|
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version: 2.
|
48
|
+
version: 2.5.0
|
49
49
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
51
|
- - ">="
|
52
52
|
- !ruby/object:Gem::Version
|
53
53
|
version: '0'
|
54
54
|
requirements: []
|
55
|
-
rubygems_version: 3.3.
|
56
|
-
signing_key:
|
55
|
+
rubygems_version: 3.3.26
|
56
|
+
signing_key:
|
57
57
|
specification_version: 4
|
58
58
|
summary: Sitecore scanner
|
59
59
|
test_files: []
|