Skip to content

Commit

Permalink
add gcp api key analyzer (#150)
Browse files Browse the repository at this point in the history
* add gcp api key analyzer

* add gcp api key analyzer
  • Loading branch information
grimmjow8 authored and d-Rickyy-b committed Oct 20, 2019
1 parent b010cb5 commit 635a5e4
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 0 deletions.
2 changes: 2 additions & 0 deletions pastepwn/analyzers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@
from .emailpasswordpairanalyzer import EmailPasswordPairAnalyzer
from .facebookaccesstokenanalyzer import FacebookAccessTokenAnalyzer
from .genericanalyzer import GenericAnalyzer
from .googleapikeyanalyzer import GoogleApiKeyAnalyzer
from .googleoauthkeyanalyzer import GoogleOAuthKeyAnalyzer
from .ibananalyzer import IBANAnalyzer
from .logicalanalyzers import AndAnalyzer
Expand Down Expand Up @@ -57,6 +58,7 @@
'EmailPasswordPairAnalyzer',
'FacebookAccessTokenAnalyzer',
'GenericAnalyzer',
'GoogleApiKeyAnalyzer',
'GoogleOAuthKeyAnalyzer',
'IBANAnalyzer',
'LogicalBaseAnalyzer',
Expand Down
10 changes: 10 additions & 0 deletions pastepwn/analyzers/googleapikeyanalyzer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# -*- coding: utf-8 -*-
from .regexanalyzer import RegexAnalyzer


class GoogleApiKeyAnalyzer(RegexAnalyzer):

def __init__(self, actions):
# https://cloud.google.com/docs/authentication/api-keys
regex = r"\bAIza[0-9A-Za-z_-]{35}\b"
super().__init__(actions, regex)
61 changes: 61 additions & 0 deletions pastepwn/analyzers/tests/googleapikeyanalyzer_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# -*- coding: utf-8 -*-
import unittest
from unittest import mock

from pastepwn.analyzers.googleapikeyanalyzer import GoogleApiKeyAnalyzer


class TestGoogleApiKeyAnalyzer(unittest.TestCase):

def setUp(self):
self.analyzer = GoogleApiKeyAnalyzer(None)
self.paste = mock.Mock()

def test_match_positive(self):
"""Test if positives are recognized"""
# google key dump
self.paste.body = "AIzaSyCTmst6SvsOAQanZKNt-2pt6nuLoFf2kSA"
self.assertTrue(self.analyzer.match(self.paste))

# google key dump
self.paste.body = "AIzaSyBKNst9JE89f4lHuNXQFTUgZKh8VZpvR6M"
self.assertTrue(self.analyzer.match(self.paste))

# google key dump
self.paste.body = "AIzammmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm"
self.assertTrue(self.analyzer.match(self.paste))

# google key dump
self.paste.body = "AIza00000000000000000000000000000000000"
self.assertTrue(self.analyzer.match(self.paste))

# key in the middle of a string
self.paste.body = "api key: AIza00000000000000000000000000000000000"
self.assertTrue(self.analyzer.match(self.paste))

def test_match_negative(self):
"""Test if negatives are not recognized"""
self.paste.body = ""
self.assertFalse(self.analyzer.match(self.paste))

self.paste.body = None
self.assertFalse(self.analyzer.match(self.paste))

# Invalid start
self.paste.body = "aiza00000000000000000000000000000000000"
self.assertFalse(self.analyzer.match(self.paste))

# Invalid start
self.paste.body = "000000000000000000000000000000000000000"
self.assertFalse(self.analyzer.match(self.paste))

# Invalid length
self.paste.body = "AIzammmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm"
self.assertFalse(self.analyzer.match(self.paste))

# Invalid length
self.paste.body = "AIzammmmmmmmm"
self.assertFalse(self.analyzer.match(self.paste))

if __name__ == '__main__':
unittest.main()

0 comments on commit 635a5e4

Please sign in to comment.