Module: PWN::AWS::IAM
- Defined in:
- lib/pwn/aws/iam.rb
Overview
This module provides a client for making API requests to AWS Identity and Access Management.
Constant Summary collapse
Class Method Summary collapse
-
.authors ⇒ Object
- Author(s)
-
0day Inc.
-
.connect(opts = {}) ⇒ Object
- Supported Method Parameters
-
PWN::AWS::IAM.connect( region: ‘required - region name to connect (eu-west-1, ap-southeast-1, ap-southeast-2, eu-central-1, ap-northeast-2, ap-northeast-1, us-east-1, sa-east-1, us-west-1, us-west-2)’, access_key_id: ‘required - Use AWS STS for best privacy (i.e. temporary access key id)’, secret_access_key: ‘required - Use AWS STS for best privacy (i.e. temporary secret access key’, sts_session_token: ‘optional - Temporary token returned by STS client for best privacy’ ).
-
.decode_key(opts = {}) ⇒ Object
- Supported Method Parameters
-
PWN::AWS::IAM.decode_key( key: ‘required - key to decode’, key_type: ‘optional - key type :access_key_id|:secret_access_key|:sts_session_token (Default: access_key_id)’, ).
-
.disconnect(opts = {}) ⇒ Object
- Supported Method Parameters
-
PWN::AWS::IAM.disconnect( iam_obj: ‘required - iam_obj returned from #connect method’ ).
-
.help ⇒ Object
Display Usage for this Module.
Class Method Details
.authors ⇒ Object
- Author(s)
-
0day Inc. <[email protected]>
168 169 170 171 172 |
# File 'lib/pwn/aws/iam.rb', line 168 public_class_method def self. "AUTHOR(S): 0day Inc. <[email protected]> " end |
.connect(opts = {}) ⇒ Object
- Supported Method Parameters
-
PWN::AWS::IAM.connect(
region: 'required - region name to connect (eu-west-1, ap-southeast-1, ap-southeast-2, eu-central-1, ap-northeast-2, ap-northeast-1, us-east-1, sa-east-1, us-west-1, us-west-2)', access_key_id: 'required - Use AWS STS for best privacy (i.e. temporary access key id)', secret_access_key: 'required - Use AWS STS for best privacy (i.e. temporary secret access key', sts_session_token: 'optional - Temporary token returned by STS client for best privacy'
)
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/pwn/aws/iam.rb', line 21 public_class_method def self.connect(opts = {}) region = opts[:region].to_s.scrub.chomp.strip access_key_id = opts[:access_key_id].to_s.scrub.chomp.strip secret_access_key = opts[:secret_access_key].to_s.scrub.chomp.strip sts_session_token = opts[:sts_session_token].to_s.scrub.chomp.strip @@logger.info('Connecting to AWS IAM...') if sts_session_token == '' iam_obj = Aws::IAM::Client.new( region: region, access_key_id: access_key_id, secret_access_key: secret_access_key ) else iam_obj = Aws::IAM::Client.new( region: region, access_key_id: access_key_id, secret_access_key: secret_access_key, session_token: sts_session_token ) end @@logger.info("complete.\n") iam_obj rescue StandardError => e raise e end |
.decode_key(opts = {}) ⇒ Object
- Supported Method Parameters
-
PWN::AWS::IAM.decode_key(
key: 'required - key to decode', key_type: 'optional - key type :access_key_id|:secret_access_key|:sts_session_token (Default: access_key_id)',
)
54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 |
# File 'lib/pwn/aws/iam.rb', line 54 public_class_method def self.decode_key(opts = {}) key = opts[:key].to_s.scrub.chomp.strip.upcase raise 'ERROR: Key is required' if key == '' key_type = opts[:key_type] || :access_key_id key_type = key_type.to_s.scrub.chomp.strip.to_sym decoded_key = {} prefix = key[0..3].to_s.downcase.to_sym case prefix when :abia resource_type = 'AWS STS Service Bearer Token' decoded_key[:prefix] = prefix when :acca resource_type = 'Context Specific Credential' decoded_key[:prefix] = prefix when :agpa resource_type = 'Group' decoded_key[:prefix] = prefix when :aida resource_type = 'IAM User' decoded_key[:prefix] = prefix when :aipa resource_type = 'EC2 Instance Profile' decoded_key[:prefix] = prefix when :akia resource_type = 'Access Key' decoded_key[:prefix] = prefix when :anpa resource_type = 'Managed Policy' decoded_key[:prefix] = prefix when :anva resource_type = 'Version in a Managed Policy' decoded_key[:prefix] = prefix when :apka resource_type = 'Public Key' decoded_key[:prefix] = prefix when :aroa resource_type = 'Role' decoded_key[:prefix] = prefix when :asca resource_type = 'Certificate' decoded_key[:prefix] = prefix when :asia resource_type = 'Temporary (AWS STS) Keys' decoded_key[:prefix] = prefix else resource_type = 'Secret Access Key' if key_type == :secret_access_key resource_type = 'STS Session' if key_type == :sts_session_token end decoded_key[:resource_type] = resource_type case key_type when :access_key_id suffix = key[4..-1] decoded_suffix = Base32.decode(suffix) trimmed_decoded_suffix = decoded_suffix[0..5] z = trimmed_decoded_suffix.bytes.inject { |total, byte| (total << 8) + byte } mask = 0x7FFFFFFFFF80 key = (z & mask) >> 7 decoded_key[:account_id] = key when :secret_access_key, :sts_session_token decoded_key[:decoded_key] = Base64.strict_decode64(key) else raise "ERROR: Invalid Key Type: #{key_type}. Valid key types are :access_key_id|:secret_access_key|:sts_session_token" end decoded_key[:key_type] = key_type decoded_key rescue StandardError => e raise e end |
.disconnect(opts = {}) ⇒ Object
- Supported Method Parameters
-
PWN::AWS::IAM.disconnect(
iam_obj: 'required - iam_obj returned from #connect method'
)
155 156 157 158 159 160 161 162 163 164 |
# File 'lib/pwn/aws/iam.rb', line 155 public_class_method def self.disconnect(opts = {}) iam_obj = opts[:iam_obj] @@logger.info('Disconnecting...') iam_obj = nil @@logger.info("complete.\n") iam_obj rescue StandardError => e raise e end |
.help ⇒ Object
Display Usage for this Module
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
# File 'lib/pwn/aws/iam.rb', line 176 public_class_method def self.help puts "USAGE: iam_obj = #{self}.connect( region: 'required - region name to connect (eu-west-1, ap-southeast-1, ap-southeast-2, eu-central-1, ap-northeast-2, ap-northeast-1, us-east-1, sa-east-1, us-west-1, us-west-2)', access_key_id: 'required - Use AWS STS for best privacy (i.e. temporary access key id)', secret_access_key: 'required - Use AWS STS for best privacy (i.e. temporary secret access key', sts_session_token: 'optional - Temporary token returned by STS client for best privacy' ) puts iam_obj.public_methods decoded_key = #{self}.decode_key( key: 'required - key to decode', key_type: 'optional - key type :access_key_id|:secret_access_key|:sts_session_token (Default: access_key_id ) #{self}.disconnect( iam_obj: 'required - iam_obj returned from #connect method' ) #{self}.authors " end |