Sha256: 799b68a767d87bce9992e4be90c5565e93959c1a11c0ee241594e54a37bae407

Contents?: true

Size: 1.18 KB

Versions: 1

Compression:

Stored size: 1.18 KB

Contents

module HackerOne
  module Client
    class Weakness
      class << self
        def extract_cwe_number(cwe)
          fail StandardError::ArgumentError unless cwe.upcase.start_with?('CWE-')

          cwe.split('CWE-').last.to_i
        end
      end

      OWASP_TOP_10_2013_TO_CWE = {
        'A1-Injection' => [77, 78, 88, 89, 90, 91, 564],
        'A2-AuthSession' =>
          [287, 613, 522, 256, 384, 472, 346, 441, 523, 620, 640, 319, 311],
        'A3-XSS' => [79],
        'A4-DirectObjRef' => [639, 99, 22],
        'A5-Misconfig' => [16, 2, 215, 548, 209],
        'A6-DataExposure' => [312, 319, 310, 326, 320, 311, 325, 328, 327],
        'A7-MissingACL' => [285, 287],
        'A8-CSRF' => [352, 642, 613, 346, 441],
        'A9-KnownVuln' => [],
        'A10-Redirects' => [601],
      }.freeze

      OWASP_DEFAULT = 'A0-Other'.freeze

      def initialize(weakness)
        @attributes = weakness
      end

      def to_owasp
        OWASP_TOP_10_2013_TO_CWE.map do |owasp, cwes|
          owasp if cwes.include?(self.class.extract_cwe_number(to_cwe))
        end.compact.first || OWASP_DEFAULT
      end

      def to_cwe
        @attributes[:external_id]
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
hackerone-client-0.2.1 lib/hackerone/client/weakness.rb