{"action":"created","comment":{"url":"https://api.github.com/repos/google/nogotofail/pulls/comments/48515042","id":48515042,"diff_hunk":"@@ -172,3 +175,66 @@ def on_ssl(self, client_hello):\n                 self.log(logging.ERROR,\n                         \"Client enabled SSLv3 protocol without TLS_FALLBACK_SCSV\")\n             self.log_attack_event(data=\"SSLv3\")\n+\n+\n+@handler.passive(handlers)\n+class NoForwardSecrecy(DataHandler):\n+    name = \"noforwardsecrecy\"\n+    description = (\n+        \"Detects selected server cipher suites which don't support \"\n+        \"Diffie-Hellman key exchange (DHE or ECDHE) i.e. in \"\n+        \"SERVER_HELLO response\")\n+\n+    buffer = \"\"\n+    ssl = False\n+\n+    def on_ssl(self, client_hello):\n+        self.ssl = True\n+        self.client_session_id = client_hello.session_id\n+        return False\n+\n+    def on_response(self, response):","path":"nogotofail/mitm/connection/handlers/data/ssl.py","position":42,"original_position":42,"commit_id":"bad4fb82c208a004c6cada1ef5a0e667dd0f69a2","original_commit_id":"bad4fb82c208a004c6cada1ef5a0e667dd0f69a2","user":{"login":"mkenne11","id":12181805,"avatar_url":"https://avatars.githubusercontent.com/u/12181805?v=3","gravatar_id":"","url":"https://api.github.com/users/mkenne11","html_url":"https://github.com/mkenne11","followers_url":"https://api.github.com/users/mkenne11/followers","following_url":"https://api.github.com/users/mkenne11/following{/other_user}","gists_url":"https://api.github.com/users/mkenne11/gists{/gist_id}","starred_url":"https://api.github.com/users/mkenne11/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mkenne11/subscriptions","organizations_url":"https://api.github.com/users/mkenne11/orgs","repos_url":"https://api.github.com/users/mkenne11/repos","events_url":"https://api.github.com/users/mkenne11/events{/privacy}","received_events_url":"https://api.github.com/users/mkenne11/received_events","type":"User","site_admin":false},"body":"Thanks Chad that's good idea to subclass the _TlsRecordHandler handler. It will make the code much cleaner also.","created_at":"2015-12-29T00:26:33Z","updated_at":"2015-12-29T00:26:33Z","html_url":"https://github.com/google/nogotofail/pull/98#discussion_r48515042","pull_request_url":"https://api.github.com/repos/google/nogotofail/pulls/98","_links":{"self":{"href":"https://api.github.com/repos/google/nogotofail/pulls/comments/48515042"},"html":{"href":"https://github.com/google/nogotofail/pull/98#discussion_r48515042"},"pull_request":{"href":"https://api.github.com/repos/google/nogotofail/pulls/98"}}},"pull_request":{"url":"https://api.github.com/repos/google/nogotofail/pulls/98","id":52775122,"html_url":"https://github.com/google/nogotofail/pull/98","diff_url":"https://github.com/google/nogotofail/pull/98.diff","patch_url":"https://github.com/google/nogotofail/pull/98.patch","issue_url":"https://api.github.com/repos/google/nogotofail/issues/98","number":98,"state":"open","locked":false,"title":"Added new data handler \"noforwardsecrecy\".","user":{"login":"mkenne11","id":12181805,"avatar_url":"https://avatars.githubusercontent.com/u/12181805?v=3","gravatar_id":"","url":"https://api.github.com/users/mkenne11","html_url":"https://github.com/mkenne11","followers_url":"https://api.github.com/users/mkenne11/followers","following_url":"https://api.github.com/users/mkenne11/following{/other_user}","gists_url":"https://api.github.com/users/mkenne11/gists{/gist_id}","starred_url":"https://api.github.com/users/mkenne11/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mkenne11/subscriptions","organizations_url":"https://api.github.com/users/mkenne11/orgs","repos_url":"https://api.github.com/users/mkenne11/repos","events_url":"https://api.github.com/users/mkenne11/events{/privacy}","received_events_url":"https://api.github.com/users/mkenne11/received_events","type":"User","site_admin":false},"body":"The \"noforwardsecrecy\" data handler detects cipher suites negotiated between client and server (in the Server Hello message) which don't support forward secrecy i.e. Ephemeral Diffie-Hellman methods DHE or ECDHE.","created_at":"2015-12-06T07:50:00Z","updated_at":"2015-12-29T00:26:33Z","closed_at":null,"merged_at":null,"merge_commit_sha":"9fb2e6b0915f6ec30c19e9465de1f2e0d6dd175c","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/google/nogotofail/pulls/98/commits","review_comments_url":"https://api.github.com/repos/google/nogotofail/pulls/98/comments","review_comment_url":"https://api.github.com/repos/google/nogotofail/pulls/comments{/number}","comments_url":"https://api.github.com/repos/google/nogotofail/issues/98/comments","statuses_url":"https://api.github.com/repos/google/nogotofail/statuses/bad4fb82c208a004c6cada1ef5a0e667dd0f69a2","head":{"label":"mkenne11:noforwardsecrecy","ref":"noforwardsecrecy","sha":"bad4fb82c208a004c6cada1ef5a0e667dd0f69a2","user":{"login":"mkenne11","id":12181805,"avatar_url":"https://avatars.githubusercontent.com/u/12181805?v=3","gravatar_id":"","url":"https://api.github.com/users/mkenne11","html_url":"https://github.com/mkenne11","followers_url":"https://api.github.com/users/mkenne11/followers","following_url":"https://api.github.com/users/mkenne11/following{/other_user}","gists_url":"https://api.github.com/users/mkenne11/gists{/gist_id}","starred_url":"https://api.github.com/users/mkenne11/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mkenne11/subscriptions","organizations_url":"https://api.github.com/users/mkenne11/orgs","repos_url":"https://api.github.com/users/mkenne11/repos","events_url":"https://api.github.com/users/mkenne11/events{/privacy}","received_events_url":"https://api.github.com/users/mkenne11/received_events","type":"User","site_admin":false},"repo":{"id":39544169,"name":"nogotofail","full_name":"mkenne11/nogotofail","owner":{"login":"mkenne11","id":12181805,"avatar_url":"https://avatars.githubusercontent.com/u/12181805?v=3","gravatar_id":"","url":"https://api.github.com/users/mkenne11","html_url":"https://github.com/mkenne11","followers_url":"https://api.github.com/users/mkenne11/followers","following_url":"https://api.github.com/users/mkenne11/following{/other_user}","gists_url":"https://api.github.com/users/mkenne11/gists{/gist_id}","starred_url":"https://api.github.com/users/mkenne11/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mkenne11/subscriptions","organizations_url":"https://api.github.com/users/mkenne11/orgs","repos_url":"https://api.github.com/users/mkenne11/repos","events_url":"https://api.github.com/users/mkenne11/events{/privacy}","received_events_url":"https://api.github.com/users/mkenne11/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/mkenne11/nogotofail","description":"An on-path blackbox network traffic security testing tool","fork":true,"url":"https://api.github.com/repos/mkenne11/nogotofail","forks_url":"https://api.github.com/repos/mkenne11/nogotofail/forks","keys_url":"https://api.github.com/repos/mkenne11/nogotofail/keys{/key_id}","collaborators_url":"https://api.github.com/repos/mkenne11/nogotofail/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/mkenne11/nogotofail/teams","hooks_url":"https://api.github.com/repos/mkenne11/nogotofail/hooks","issue_events_url":"https://api.github.com/repos/mkenne11/nogotofail/issues/events{/number}","events_url":"https://api.github.com/repos/mkenne11/nogotofail/events","assignees_url":"https://api.github.com/repos/mkenne11/nogotofail/assignees{/user}","branches_url":"https://api.github.com/repos/mkenne11/nogotofail/branches{/branch}","tags_url":"https://api.github.com/repos/mkenne11/nogotofail/tags","blobs_url":"https://api.github.com/repos/mkenne11/nogotofail/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/mkenne11/nogotofail/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/mkenne11/nogotofail/git/refs{/sha}","trees_url":"https://api.github.com/repos/mkenne11/nogotofail/git/trees{/sha}","statuses_url":"https://api.github.com/repos/mkenne11/nogotofail/statuses/{sha}","languages_url":"https://api.github.com/repos/mkenne11/nogotofail/languages","stargazers_url":"https://api.github.com/repos/mkenne11/nogotofail/stargazers","contributors_url":"https://api.github.com/repos/mkenne11/nogotofail/contributors","subscribers_url":"https://api.github.com/repos/mkenne11/nogotofail/subscribers","subscription_url":"https://api.github.com/repos/mkenne11/nogotofail/subscription","commits_url":"https://api.github.com/repos/mkenne11/nogotofail/commits{/sha}","git_commits_url":"https://api.github.com/repos/mkenne11/nogotofail/git/commits{/sha}","comments_url":"https://api.github.com/repos/mkenne11/nogotofail/comments{/number}","issue_comment_url":"https://api.github.com/repos/mkenne11/nogotofail/issues/comments{/number}","contents_url":"https://api.github.com/repos/mkenne11/nogotofail/contents/{+path}","compare_url":"https://api.github.com/repos/mkenne11/nogotofail/compare/{base}...{head}","merges_url":"https://api.github.com/repos/mkenne11/nogotofail/merges","archive_url":"https://api.github.com/repos/mkenne11/nogotofail/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/mkenne11/nogotofail/downloads","issues_url":"https://api.github.com/repos/mkenne11/nogotofail/issues{/number}","pulls_url":"https://api.github.com/repos/mkenne11/nogotofail/pulls{/number}","milestones_url":"https://api.github.com/repos/mkenne11/nogotofail/milestones{/number}","notifications_url":"https://api.github.com/repos/mkenne11/nogotofail/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/mkenne11/nogotofail/labels{/name}","releases_url":"https://api.github.com/repos/mkenne11/nogotofail/releases{/id}","created_at":"2015-07-23T03:42:30Z","updated_at":"2015-07-23T03:42:31Z","pushed_at":"2015-12-06T07:49:13Z","git_url":"git://github.com/mkenne11/nogotofail.git","ssh_url":"git@github.com:mkenne11/nogotofail.git","clone_url":"https://github.com/mkenne11/nogotofail.git","svn_url":"https://github.com/mkenne11/nogotofail","homepage":"","size":367,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"dev"}},"base":{"label":"google:dev","ref":"dev","sha":"7e998a58048084e448edbc07033b778ce968c6af","user":{"login":"google","id":1342004,"avatar_url":"https://avatars.githubusercontent.com/u/1342004?v=3","gravatar_id":"","url":"https://api.github.com/users/google","html_url":"https://github.com/google","followers_url":"https://api.github.com/users/google/followers","following_url":"https://api.github.com/users/google/following{/other_user}","gists_url":"https://api.github.com/users/google/gists{/gist_id}","starred_url":"https://api.github.com/users/google/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google/subscriptions","organizations_url":"https://api.github.com/users/google/orgs","repos_url":"https://api.github.com/users/google/repos","events_url":"https://api.github.com/users/google/events{/privacy}","received_events_url":"https://api.github.com/users/google/received_events","type":"Organization","site_admin":false},"repo":{"id":25940829,"name":"nogotofail","full_name":"google/nogotofail","owner":{"login":"google","id":1342004,"avatar_url":"https://avatars.githubusercontent.com/u/1342004?v=3","gravatar_id":"","url":"https://api.github.com/users/google","html_url":"https://github.com/google","followers_url":"https://api.github.com/users/google/followers","following_url":"https://api.github.com/users/google/following{/other_user}","gists_url":"https://api.github.com/users/google/gists{/gist_id}","starred_url":"https://api.github.com/users/google/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/google/subscriptions","organizations_url":"https://api.github.com/users/google/orgs","repos_url":"https://api.github.com/users/google/repos","events_url":"https://api.github.com/users/google/events{/privacy}","received_events_url":"https://api.github.com/users/google/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/google/nogotofail","description":"An on-path blackbox network traffic security testing tool","fork":false,"url":"https://api.github.com/repos/google/nogotofail","forks_url":"https://api.github.com/repos/google/nogotofail/forks","keys_url":"https://api.github.com/repos/google/nogotofail/keys{/key_id}","collaborators_url":"https://api.github.com/repos/google/nogotofail/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/google/nogotofail/teams","hooks_url":"https://api.github.com/repos/google/nogotofail/hooks","issue_events_url":"https://api.github.com/repos/google/nogotofail/issues/events{/number}","events_url":"https://api.github.com/repos/google/nogotofail/events","assignees_url":"https://api.github.com/repos/google/nogotofail/assignees{/user}","branches_url":"https://api.github.com/repos/google/nogotofail/branches{/branch}","tags_url":"https://api.github.com/repos/google/nogotofail/tags","blobs_url":"https://api.github.com/repos/google/nogotofail/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/google/nogotofail/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/google/nogotofail/git/refs{/sha}","trees_url":"https://api.github.com/repos/google/nogotofail/git/trees{/sha}","statuses_url":"https://api.github.com/repos/google/nogotofail/statuses/{sha}","languages_url":"https://api.github.com/repos/google/nogotofail/languages","stargazers_url":"https://api.github.com/repos/google/nogotofail/stargazers","contributors_url":"https://api.github.com/repos/google/nogotofail/contributors","subscribers_url":"https://api.github.com/repos/google/nogotofail/subscribers","subscription_url":"https://api.github.com/repos/google/nogotofail/subscription","commits_url":"https://api.github.com/repos/google/nogotofail/commits{/sha}","git_commits_url":"https://api.github.com/repos/google/nogotofail/git/commits{/sha}","comments_url":"https://api.github.com/repos/google/nogotofail/comments{/number}","issue_comment_url":"https://api.github.com/repos/google/nogotofail/issues/comments{/number}","contents_url":"https://api.github.com/repos/google/nogotofail/contents/{+path}","compare_url":"https://api.github.com/repos/google/nogotofail/compare/{base}...{head}","merges_url":"https://api.github.com/repos/google/nogotofail/merges","archive_url":"https://api.github.com/repos/google/nogotofail/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/google/nogotofail/downloads","issues_url":"https://api.github.com/repos/google/nogotofail/issues{/number}","pulls_url":"https://api.github.com/repos/google/nogotofail/pulls{/number}","milestones_url":"https://api.github.com/repos/google/nogotofail/milestones{/number}","notifications_url":"https://api.github.com/repos/google/nogotofail/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/google/nogotofail/labels{/name}","releases_url":"https://api.github.com/repos/google/nogotofail/releases{/id}","created_at":"2014-10-29T20:50:54Z","updated_at":"2015-12-28T08:39:35Z","pushed_at":"2015-12-06T07:50:00Z","git_url":"git://github.com/google/nogotofail.git","ssh_url":"git@github.com:google/nogotofail.git","clone_url":"https://github.com/google/nogotofail.git","svn_url":"https://github.com/google/nogotofail","homepage":"","size":567,"stargazers_count":1730,"watchers_count":1730,"language":"Python","has_issues":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":221,"mirror_url":null,"open_issues_count":22,"forks":221,"open_issues":22,"watchers":1730,"default_branch":"dev"}},"_links":{"self":{"href":"https://api.github.com/repos/google/nogotofail/pulls/98"},"html":{"href":"https://github.com/google/nogotofail/pull/98"},"issue":{"href":"https://api.github.com/repos/google/nogotofail/issues/98"},"comments":{"href":"https://api.github.com/repos/google/nogotofail/issues/98/comments"},"review_comments":{"href":"https://api.github.com/repos/google/nogotofail/pulls/98/comments"},"review_comment":{"href":"https://api.github.com/repos/google/nogotofail/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/google/nogotofail/pulls/98/commits"},"statuses":{"href":"https://api.github.com/repos/google/nogotofail/statuses/bad4fb82c208a004c6cada1ef5a0e667dd0f69a2"}}}}