puppet-sec-lint 0.1.2 → 0.5.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yml +4 -2
  3. data/.idea/puppet-sec-lint.iml +7 -4
  4. data/Gemfile +3 -1
  5. data/Gemfile.lock +14 -1
  6. data/README.md +36 -17
  7. data/_config.yml +1 -0
  8. data/docs/404.html +24 -0
  9. data/docs/Gemfile +30 -0
  10. data/docs/Gemfile.lock +275 -0
  11. data/docs/_config.yml +41 -0
  12. data/docs/_posts/2021-05-03-welcome-to-jekyll.markdown +25 -0
  13. data/docs/_site/404.html +71 -0
  14. data/docs/_site/feed.xml +13 -0
  15. data/docs/_site/index.html +1 -0
  16. data/docs/_site/jekyll/update/2021/05/03/welcome-to-jekyll.html +77 -0
  17. data/docs/hard-coded-credentials.md +17 -0
  18. data/docs/images/puppet-sec-lint_console.png +0 -0
  19. data/docs/images/puppet-sec-lint_vscode.png +0 -0
  20. data/docs/index.md +6 -0
  21. data/exe/puppet-sec-lint +81 -15
  22. data/file.pp +77 -0
  23. data/lib/configurations/configuration.rb +2 -1
  24. data/lib/configurations/regex_configuration.rb +9 -0
  25. data/lib/facades/configuration_file_facade.rb +3 -1
  26. data/lib/facades/configuration_page_facade.rb +6 -0
  27. data/lib/lol.pp +6 -6
  28. data/lib/puppet-sec-lint/version.rb +3 -1
  29. data/lib/rule_engine.rb +15 -3
  30. data/lib/rules/admin_by_default_rule.rb +33 -0
  31. data/lib/rules/cyrillic_homograph_attack.rb +27 -0
  32. data/lib/rules/empty_password_rule.rb +35 -0
  33. data/lib/rules/hard_coded_credentials_rule.rb +22 -31
  34. data/lib/rules/invalid_ip_addr_binding_rule.rb +37 -0
  35. data/lib/rules/no_http_rule.rb +26 -9
  36. data/lib/rules/rule.rb +72 -0
  37. data/lib/rules/suspicious_comment_rule.rb +28 -0
  38. data/lib/rules/use_weak_crypto_algorithms_rule.rb +28 -0
  39. data/lib/servers/language_server.rb +101 -0
  40. data/lib/servers/linter_server.rb +52 -0
  41. data/lib/settings.ini +39 -0
  42. data/lib/{sin.rb → sin/sin.rb} +6 -1
  43. data/lib/sin/sin_type.rb +44 -0
  44. data/lib/test.txt +15 -0
  45. data/lib/test2.rb +16 -0
  46. data/lib/test3.rb +32 -0
  47. data/lib/test_new.rb +19 -0
  48. data/puppet-sec-lint-0.5.3.gem +0 -0
  49. data/puppet-sec-lint.gemspec +7 -1
  50. metadata +139 -6
  51. data/lib/language_server.rb +0 -78
  52. data/lib/sin_type.rb +0 -12
@@ -0,0 +1,28 @@
1
+ require_relative '../configurations/list_configuration'
2
+
3
+ class SuspiciousCommentRule < Rule
4
+ @trigger_words = %w[hack fixme later later2 todo ticket launchpad bug to-do]
5
+ @suspicious = /hack|fixme|ticket|bug|secur|debug|defect|weak/
6
+
7
+ @trigger_words_conf = ListConfiguration.new("List of trigger words", @trigger_words, "List of words that identify a suspicious comment")
8
+ @suspicious_conf = RegexConfiguration.new("Regular expression of keywords present in suspicious comments", @suspicious, "Regular expression that identifies words that are immediately considered suspicious comments that shouldn't be present in a finalized product.")
9
+
10
+ @configurations+=[@trigger_words_conf, @suspicious_conf]
11
+
12
+ @name = "Suspicious comments"
13
+
14
+ def self.AnalyzeTokens(tokens)
15
+ result = []
16
+
17
+ ftokens = self.get_comments(tokens)
18
+ ftokens.each do |token|
19
+ token_value = token.value.downcase
20
+ token_type = token.type.to_s
21
+ if (token_value =~ @suspicious_conf.value)
22
+ result.append(Sin.new(SinType::SuspiciousComments, token.line, token.column, token.line, token.column+token_value.length))
23
+ end
24
+ end
25
+
26
+ return result
27
+ end
28
+ end
@@ -0,0 +1,28 @@
1
+ require_relative '../configurations/list_configuration'
2
+
3
+ class UseWeakCryptoAlgorithmsRule < Rule
4
+ @name = "Use of weak crypto algorithm"
5
+
6
+ @poor_crypto = /^(sha1|md5)/
7
+
8
+ @poor_crypto_conf = RegexConfiguration.new("Regular expression of weak Crypto Algorithms", @poor_crypto, "Regular expression for names of known weak Cryptographic algorithms that shouldn't be used to secure sensitive information.")
9
+
10
+ @configurations+=[@poor_crypto_conf]
11
+
12
+ def self.AnalyzeTokens(tokens)
13
+ result = []
14
+
15
+ tokens.each do |token|
16
+ token_value = token.value.downcase
17
+ token_type = token.type.to_s
18
+ if !token.next_token.nil?
19
+ next_token_type = token.next_token.type.to_s
20
+ end
21
+ if (token_value =~ @poor_crypto_conf.value) && (next_token_type.eql? "LPAREN")
22
+ result.append(Sin.new(SinType::WeakCryptoAlgorithm, token.line, token.column, token.line, token.column+token_value.length))
23
+ end
24
+ end
25
+
26
+ return result
27
+ end
28
+ end
@@ -0,0 +1,101 @@
1
+ require 'json'
2
+ require 'uri'
3
+ require 'socket'
4
+ require_relative '../rule_engine'
5
+ require_relative '../visitors/configuration_visitor'
6
+ require_relative '../facades/configuration_page_facade'
7
+ require_relative '../facades/configuration_file_facade'
8
+
9
+ class LanguageServer
10
+ ConfigurationVisitor.GenerateIDs
11
+ ConfigurationFileFacade.LoadConfigurations
12
+
13
+ def self.start(port)
14
+ port ||= 5007
15
+ server = TCPServer.open(port)
16
+
17
+ loop {
18
+ Thread.fork(server.accept) do |client|
19
+ while line=client.gets
20
+ length=Integer(line.scan(/\d/).join(''))
21
+ line=client.read(length+2)
22
+ request = JSON.parse(line)
23
+ puts line
24
+
25
+ method_name = request['method'].sub('/', '_')
26
+ response = if self.respond_to? "client_"+method_name then self.send("client_"+method_name,request['id'],request['params']) end
27
+
28
+ if not response.nil?
29
+ client.flush
30
+ client.print("Content-Length: "+response.length.to_s+"\r\n\r\n")
31
+ client.print(response)
32
+ puts response
33
+ end
34
+ end
35
+ client.close
36
+ end
37
+ }
38
+ end
39
+
40
+ def self.client_initialize(id,params)
41
+ return JSON.generate({
42
+ jsonrpc: '2.0',
43
+ result: {
44
+ capabilities: {
45
+ textDocumentSync:1,
46
+ implementationProvider: "true"
47
+ }
48
+ },
49
+ id: id
50
+ })
51
+ end
52
+
53
+ def self.client_textDocument_didOpen(id,params)
54
+ uri = params["textDocument"]["uri"]
55
+ version = params["textDocument"]["version"]
56
+ code = params['textDocument']['text']
57
+ return self.generate_diagnostics(uri,version,code)
58
+ return
59
+ end
60
+
61
+ def self.client_textDocument_didChange(id,params)
62
+ uri = params["textDocument"]["uri"]
63
+ version = params["textDocument"]["version"]
64
+ code = params['contentChanges'][0]['text']
65
+ return self.generate_diagnostics(uri,version,code)
66
+ return
67
+ end
68
+
69
+ def self.generate_diagnostics(uri,version,code)
70
+ result = RuleEngine.analyzeDocument(code) #convert to json
71
+
72
+ diagnostics = []
73
+
74
+ result.each do |sin|
75
+ diagnostics.append({
76
+ range:{
77
+ start: { line: sin.begin_line-1, character: sin.begin_char },
78
+ end: { line: sin.end_line-1, character: sin.end_char }
79
+ },
80
+ severity: 2,
81
+ code: {
82
+ value:sin.type[:name],
83
+ target:sin.type[:solution]
84
+ },
85
+ source:'Puppet-sec-lint',
86
+ message: sin.type[:message]
87
+ })
88
+ end
89
+
90
+ return JSON.generate({
91
+ jsonrpc: '2.0',
92
+ method: 'textDocument/publishDiagnostics',
93
+ params: {
94
+ uri: uri,
95
+ version: version,
96
+ diagnostics: diagnostics
97
+ }
98
+ })
99
+ end
100
+
101
+ end
@@ -0,0 +1,52 @@
1
+ require "rack"
2
+ require "thin"
3
+ require 'json'
4
+ require 'uri'
5
+ require_relative '../rule_engine'
6
+ require_relative '../visitors/configuration_visitor'
7
+ require_relative '../facades/configuration_page_facade'
8
+ require_relative '../facades/configuration_file_facade'
9
+
10
+ class LinterServer
11
+ ConfigurationVisitor.GenerateIDs
12
+ ConfigurationFileFacade.LoadConfigurations
13
+
14
+ def call(env)
15
+ req = Rack::Request.new(env)
16
+
17
+ case req.path
18
+ when "/configuration"
19
+ if req.post?
20
+ process_form(req)
21
+ elsif req.get?
22
+ configurations_page
23
+ end
24
+ end
25
+
26
+ end
27
+
28
+ def configurations_page
29
+ configuration_page = ConfigurationPageFacade.AssemblePage
30
+
31
+ return [200, { 'Content-Type' => 'text/html' }, [configuration_page]]
32
+ end
33
+
34
+ def process_form(req)
35
+ new_conf = URI.decode_www_form(req.body.read)
36
+ new_conf_hash = Hash[new_conf.map {|key, value| [key, value]}]
37
+
38
+ begin
39
+ ConfigurationPageFacade.ApplyConfigurations(new_conf_hash)
40
+ ConfigurationFileFacade.SaveConfigurations
41
+ rescue StandardError => error
42
+ return [400, { 'Content-Type' => 'text/plain' }, ["Error: #{error.message}"]]
43
+ end
44
+
45
+ return [200, { 'Content-Type' => 'text/plain' }, ["Changes saved successfully"]]
46
+ end
47
+
48
+ def self.start(port)
49
+ Rack::Handler::Thin.run(LinterServer.new, :Port => port)
50
+ end
51
+
52
+ end
data/lib/settings.ini ADDED
@@ -0,0 +1,39 @@
1
+ [HardCodedCredentialsRule]
2
+ HardCodedCredentialsRule-enable_configuration = true
3
+ HardCodedCredentialsRule-list_of_known_words_not_considered_in_credentials = pe-puppet,pe-webserver,pe-puppetdb,pe-postgres,pe-console-services,pe-orchestration-services,pe-ace-server,pe-bolt-server
4
+ HardCodedCredentialsRule-list_of_invalid_values_in_credentials = undefined,unset,www-data,wwwrun,www,no,yes,[],root
5
+ HardCodedCredentialsRule-regular_expression_of_words_present_in_credentials = (?-mix:user|usr|pass(word|_|$)|pwd|key|secret)
6
+ HardCodedCredentialsRule-regular_expression_of_words_not_present_in_credentials = (?-mix:gpg|path|type|buff|zone|mode|tag|header|scheme|length|guid)
7
+
8
+ [NoHTTPRule]
9
+ NoHTTPRule-enable_configuration = true
10
+ NoHTTPRule-list_of_resources_that_can_use_http = apt::source,::apt::source,wget::fetch,yumrepo,yum::,aptly::mirror,util::system_package,yum::managed_yumrepo
11
+ NoHTTPRule-list_of_keywords_for_urls = backport,key,download,uri,mirror
12
+ NoHTTPRule-regular_expression_of_a_normal_http_address = (?-mix:^http:\/\/.+)
13
+
14
+ [AdminByDefaultRule]
15
+ AdminByDefaultRule-enable_configuration = true
16
+ AdminByDefaultRule-regular_expression_of_words_present_in_credentials = (?-mix:user|usr|pass(word|_|$)|pwd)
17
+
18
+ [EmptyPasswordRule]
19
+ EmptyPasswordRule-enable_configuration = true
20
+ EmptyPasswordRule-list_of_trigger_words = pwd,password,pass
21
+ EmptyPasswordRule-regular_expression_of_password_name = (?-mix:pass(word|_|$)|pwd)
22
+
23
+ [InvalidIPAddrBindingRule]
24
+ InvalidIPAddrBindingRule-enable_configuration = true
25
+ InvalidIPAddrBindingRule-regular_expression_of_an_invalid_ip_address = (?-mix:^((http(s)?:\/\/)?0.0.0.0(:\d{1,5})?)$)
26
+
27
+ [UseWeakCryptoAlgorithmsRule]
28
+ UseWeakCryptoAlgorithmsRule-enable_configuration = true
29
+ UseWeakCryptoAlgorithmsRule-regular_expression_of_weak_crypto_algorithms = (?-mix:^(sha1|md5))
30
+
31
+ [SuspiciousCommentRule]
32
+ SuspiciousCommentRule-enable_configuration = true
33
+ SuspiciousCommentRule-list_of_trigger_words = hack,fixme,later,later2,todo,ticket,launchpad,bug,to-do
34
+ SuspiciousCommentRule-regular_expression_of_keywords_present_in_suspicious_comments = (?-mix:hack|fixme|ticket|bug|secur|debug|defect|weak)
35
+
36
+ [CyrillicHomographAttack]
37
+ CyrillicHomographAttack-enable_configuration = true
38
+ CyrillicHomographAttack-regular_expression_of_links_with_cyrillic_characters = (?-mix:^(http(s)?:\/\/)?.*\p{Cyrillic}+)
39
+
@@ -10,6 +10,11 @@ class Sin
10
10
  end
11
11
 
12
12
  def ToString
13
- return "<Sin:#{@type[:name]}, Line:#{@begin_line}, Char:#{@begin_char}, Message:#{@type[:message]}, Recommendation:#{@type[:recommendation]}>"
13
+ return "<Sin:#{@type[:name]}, Line:#{@begin_line}, Char:#{@begin_char}, Message:#{@type[:message]}, Recommendation:#{@type[:solution]}>"
14
14
  end
15
+
16
+ def ==(other_object)
17
+ @type == other_object.type && @begin_line == other_object.begin_line && @begin_char == other_object.begin_char && @end_line == other_object.end_line && @end_char == other_object.end_char
18
+ end
19
+
15
20
  end
@@ -0,0 +1,44 @@
1
+ module SinType
2
+ base_url="https://tiagor98.github.io/puppet-sec-lint"
3
+
4
+ HardCodedCred = {
5
+ name: "Hard Coded Credentials",
6
+ message: "Do not hard code secrets. This may help an attacker to attack the system.",
7
+ solution: "#{base_url}/hard-coded-credentials"
8
+ }
9
+ HttpWithoutTLS = {
10
+ name: "HTTP without TLS",
11
+ message: "Do not use HTTP without TLS. This may cause a man in the middle attack.",
12
+ solution: "#{base_url}/http-without-tls"
13
+ }
14
+ AdminByDefault = {
15
+ name: "Admin by default",
16
+ message: "This violates the secure by design principle.",
17
+ solution: "#{base_url}/admin-by-default"
18
+ }
19
+ EmptyPassword = {
20
+ name: "Empty password",
21
+ message: "Do not keep password field empty. This may help an attacker to attack.",
22
+ solution: "#{base_url}/empty-password"
23
+ }
24
+ InvalidIPAddrBinding = {
25
+ name: "Invalid IP Address Binding",
26
+ message: "This config allows connections from every possible network.",
27
+ solution: "#{base_url}/invalid-ip-addr-binding"
28
+ }
29
+ SuspiciousComments = {
30
+ name: "Suspicious Comments",
31
+ message: "This comment can expose sensitive information to attackers.",
32
+ solution: "#{base_url}/suspicious-comments"
33
+ }
34
+ WeakCryptoAlgorithm = {
35
+ name: "Weak Crypto Algorithm",
36
+ message: "Do not use this algorithm, as it may have security weaknesses.",
37
+ solution: "#{base_url}/weak-crypto-algorithm"
38
+ }
39
+ CyrillicHomographAttack = {
40
+ name: "Cyrillic Homograph attack",
41
+ message: "This link has a cyrillic char. These are not rendered by browsers and are sometimes used for phishing attacks.",
42
+ solution: "#{base_url}/cyrillic-homograph-attack"
43
+ }
44
+ end
data/lib/test.txt ADDED
@@ -0,0 +1,15 @@
1
+ jiuhiuhiuh
2
+ ouhiuhiuh
3
+ iuhiuh
4
+ iuhiuhkokok
5
+ kokokokokokokowdijwoidjqwoidjqwodijqdoiqjwdodij
6
+ qwdqwd
7
+ qwdqwddq
8
+ wd
9
+ qwdqwdoijoijoijoij
10
+ oijoijoijoij
11
+ kkkkkkkk
12
+ huiuhiuhiuh
13
+
14
+ kkjjjm
15
+ okpokpok,l,l,l
data/lib/test2.rb ADDED
@@ -0,0 +1,16 @@
1
+ require 'rjr/nodes/ws'
2
+
3
+ # listen for methods via amqp, websockets, http, and via local calls
4
+
5
+ ws_node = RJR::Nodes::WS.new :node_id => 'server', :host => '127.0.0.1', :port => 5007
6
+
7
+
8
+ # define a rpc method called 'hello' which takes
9
+ # one argument and returns it in upper case
10
+ ws_node.dispatcher.handle("initialize") { |processId,clientInfo,locale,rootPath,rootUri,capabilities,trace,workspaceFolders|
11
+ arg.upcase
12
+ }
13
+
14
+ # start the server and block
15
+ ws_node.listen
16
+ ws_node.join
data/lib/test3.rb ADDED
@@ -0,0 +1,32 @@
1
+ require 'socket' # Get sockets from stdlib
2
+ require 'json'
3
+
4
+ server = TCPServer.open(5007) # Socket to listen on port 2000
5
+
6
+ loop {
7
+ Thread.fork(server.accept) do |client|
8
+ while line=client.gets
9
+ length=Integer(line.scan(/\d/).join(''))
10
+ line=client.read(length+2)
11
+ request = JSON.parse(line)
12
+ puts line
13
+
14
+ response = {
15
+ jsonrpc: request['jsonrpc'],
16
+ result: {
17
+ capabilities: {
18
+ textDocumentSync:1
19
+ }
20
+ },
21
+ id: request['id']
22
+ }
23
+
24
+ response = JSON.generate(response)
25
+
26
+ client.flush
27
+ client.puts("Content-Length: "+response.length.to_s+"\r\n\r\n")
28
+ client.puts(response)
29
+ end
30
+ client.close
31
+ end
32
+ }
data/lib/test_new.rb ADDED
@@ -0,0 +1,19 @@
1
+ require 'jimson'
2
+
3
+ class MyHandler
4
+ extend Jimson::Handler
5
+
6
+ def initi(a,b)
7
+ a + b
8
+ end
9
+
10
+ def initialize
11
+ super
12
+ end
13
+
14
+ end
15
+
16
+ server = Jimson::Server.new(MyHandler.new)
17
+ server.port = 5007
18
+ server.host = '127.0.0.1'
19
+ server.start # serve with webrick on http://0.0.0.0:8999/
Binary file
@@ -30,7 +30,13 @@ Gem::Specification.new do |spec|
30
30
  spec.require_paths = ["lib"]
31
31
 
32
32
  # Uncomment to register a new dependency of your gem
33
- # spec.add_dependency "example-gem", "~> 1.0"
33
+ spec.add_runtime_dependency 'puppet-lint', '~> 2.4', '>= 2.4.2'
34
+ spec.add_runtime_dependency 'rake', '~> 13.0'
35
+ spec.add_runtime_dependency 'minitest', '~> 5.0'
36
+ spec.add_runtime_dependency 'rack', '~> 2.2.3'
37
+ spec.add_runtime_dependency 'thin', '~> 1.8.0'
38
+ spec.add_runtime_dependency 'inifile', '~> 3.0.0'
39
+ spec.add_runtime_dependency 'launchy', '~> 2.5.0'
34
40
 
35
41
  # For more information and examples about making a new gem, checkout our
36
42
  # guide at: https://bundler.io/guides/creating_gem.html
metadata CHANGED
@@ -1,15 +1,119 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: puppet-sec-lint
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.5.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tiago Ribeiro
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-04-11 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2021-05-12 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: puppet-lint
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.4'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 2.4.2
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '2.4'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 2.4.2
33
+ - !ruby/object:Gem::Dependency
34
+ name: rake
35
+ requirement: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '13.0'
40
+ type: :runtime
41
+ prerelease: false
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '13.0'
47
+ - !ruby/object:Gem::Dependency
48
+ name: minitest
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '5.0'
54
+ type: :runtime
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - "~>"
59
+ - !ruby/object:Gem::Version
60
+ version: '5.0'
61
+ - !ruby/object:Gem::Dependency
62
+ name: rack
63
+ requirement: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - "~>"
66
+ - !ruby/object:Gem::Version
67
+ version: 2.2.3
68
+ type: :runtime
69
+ prerelease: false
70
+ version_requirements: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - "~>"
73
+ - !ruby/object:Gem::Version
74
+ version: 2.2.3
75
+ - !ruby/object:Gem::Dependency
76
+ name: thin
77
+ requirement: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - "~>"
80
+ - !ruby/object:Gem::Version
81
+ version: 1.8.0
82
+ type: :runtime
83
+ prerelease: false
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - "~>"
87
+ - !ruby/object:Gem::Version
88
+ version: 1.8.0
89
+ - !ruby/object:Gem::Dependency
90
+ name: inifile
91
+ requirement: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - "~>"
94
+ - !ruby/object:Gem::Version
95
+ version: 3.0.0
96
+ type: :runtime
97
+ prerelease: false
98
+ version_requirements: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - "~>"
101
+ - !ruby/object:Gem::Version
102
+ version: 3.0.0
103
+ - !ruby/object:Gem::Dependency
104
+ name: launchy
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: 2.5.0
110
+ type: :runtime
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: 2.5.0
13
117
  description: This is a more complete security linter for the puppet language
14
118
  email:
15
119
  - tiago7b27@gmail.com
@@ -35,24 +139,53 @@ files:
35
139
  - LICENSE.txt
36
140
  - README.md
37
141
  - Rakefile
142
+ - _config.yml
38
143
  - bin/console
39
144
  - bin/setup
145
+ - docs/404.html
146
+ - docs/Gemfile
147
+ - docs/Gemfile.lock
148
+ - docs/_config.yml
149
+ - docs/_posts/2021-05-03-welcome-to-jekyll.markdown
150
+ - docs/_site/404.html
151
+ - docs/_site/feed.xml
152
+ - docs/_site/index.html
153
+ - docs/_site/jekyll/update/2021/05/03/welcome-to-jekyll.html
154
+ - docs/hard-coded-credentials.md
155
+ - docs/images/puppet-sec-lint_console.png
156
+ - docs/images/puppet-sec-lint_vscode.png
157
+ - docs/index.md
40
158
  - exe/puppet-sec-lint
159
+ - file.pp
41
160
  - lib/configurations/boolean_configuration.rb
42
161
  - lib/configurations/configuration.rb
43
162
  - lib/configurations/list_configuration.rb
163
+ - lib/configurations/regex_configuration.rb
44
164
  - lib/facades/configuration_file_facade.rb
45
165
  - lib/facades/configuration_page_facade.rb
46
- - lib/language_server.rb
47
166
  - lib/lol.pp
48
167
  - lib/puppet-sec-lint/version.rb
49
168
  - lib/rule_engine.rb
169
+ - lib/rules/admin_by_default_rule.rb
170
+ - lib/rules/cyrillic_homograph_attack.rb
171
+ - lib/rules/empty_password_rule.rb
50
172
  - lib/rules/hard_coded_credentials_rule.rb
173
+ - lib/rules/invalid_ip_addr_binding_rule.rb
51
174
  - lib/rules/no_http_rule.rb
52
175
  - lib/rules/rule.rb
53
- - lib/sin.rb
54
- - lib/sin_type.rb
176
+ - lib/rules/suspicious_comment_rule.rb
177
+ - lib/rules/use_weak_crypto_algorithms_rule.rb
178
+ - lib/servers/language_server.rb
179
+ - lib/servers/linter_server.rb
180
+ - lib/settings.ini
181
+ - lib/sin/sin.rb
182
+ - lib/sin/sin_type.rb
183
+ - lib/test.txt
184
+ - lib/test2.rb
185
+ - lib/test3.rb
186
+ - lib/test_new.rb
55
187
  - lib/visitors/configuration_visitor.rb
188
+ - puppet-sec-lint-0.5.3.gem
56
189
  - puppet-sec-lint.gemspec
57
190
  homepage: https://github.com/TiagoR98/puppet-sec-lint
58
191
  licenses: