{"action":"created","comment":{"url":"https://api.github.com/repos/rapid7/metasploit-framework/pulls/comments/220766188","pull_request_review_id":159250675,"id":220766188,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIyMDc2NjE4OA==","diff_hunk":"@@ -0,0 +1,19 @@\n+module Msf::Module::Stability\n+  extend ActiveSupport::Concern\n+\n+  module ClassMethods\n+    def stability\n+      instance = self.new\n+      instance.notes['Stability'] ? instance.notes['Stability'] : []\n+    end\n+  end\n+\n+  def stability\n+    self.class.stability\n+  end\n+\n+  def stability_to_s\n+    stability * ', '\n+  end\n+\n+end","path":"lib/msf/core/module/stability.rb","position":19,"original_position":19,"commit_id":"583874d370d25c934222c98ec3dd5d0dabe220f0","original_commit_id":"583874d370d25c934222c98ec3dd5d0dabe220f0","user":{"login":"wvu-r7","id":4551878,"node_id":"MDQ6VXNlcjQ1NTE4Nzg=","avatar_url":"https://avatars2.githubusercontent.com/u/4551878?v=4","gravatar_id":"","url":"https://api.github.com/users/wvu-r7","html_url":"https://github.com/wvu-r7","followers_url":"https://api.github.com/users/wvu-r7/followers","following_url":"https://api.github.com/users/wvu-r7/following{/other_user}","gists_url":"https://api.github.com/users/wvu-r7/gists{/gist_id}","starred_url":"https://api.github.com/users/wvu-r7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wvu-r7/subscriptions","organizations_url":"https://api.github.com/users/wvu-r7/orgs","repos_url":"https://api.github.com/users/wvu-r7/repos","events_url":"https://api.github.com/users/wvu-r7/events{/privacy}","received_events_url":"https://api.github.com/users/wvu-r7/received_events","type":"User","site_admin":false},"body":"Missing EOF newline? Maybe your editor has a setting for it.","created_at":"2018-09-27T00:51:47Z","updated_at":"2018-09-27T00:51:47Z","html_url":"https://github.com/rapid7/metasploit-framework/pull/10707#discussion_r220766188","pull_request_url":"https://api.github.com/repos/rapid7/metasploit-framework/pulls/10707","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/rapid7/metasploit-framework/pulls/comments/220766188"},"html":{"href":"https://github.com/rapid7/metasploit-framework/pull/10707#discussion_r220766188"},"pull_request":{"href":"https://api.github.com/repos/rapid7/metasploit-framework/pulls/10707"}}},"pull_request":{"url":"https://api.github.com/repos/rapid7/metasploit-framework/pulls/10707","id":218491028,"node_id":"MDExOlB1bGxSZXF1ZXN0MjE4NDkxMDI4","html_url":"https://github.com/rapid7/metasploit-framework/pull/10707","diff_url":"https://github.com/rapid7/metasploit-framework/pull/10707.diff","patch_url":"https://github.com/rapid7/metasploit-framework/pull/10707.patch","issue_url":"https://api.github.com/repos/rapid7/metasploit-framework/issues/10707","number":10707,"state":"open","locked":false,"title":"Add support to track module reliability, side effects, and stability","user":{"login":"wchen-r7","id":1170914,"node_id":"MDQ6VXNlcjExNzA5MTQ=","avatar_url":"https://avatars2.githubusercontent.com/u/1170914?v=4","gravatar_id":"","url":"https://api.github.com/users/wchen-r7","html_url":"https://github.com/wchen-r7","followers_url":"https://api.github.com/users/wchen-r7/followers","following_url":"https://api.github.com/users/wchen-r7/following{/other_user}","gists_url":"https://api.github.com/users/wchen-r7/gists{/gist_id}","starred_url":"https://api.github.com/users/wchen-r7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wchen-r7/subscriptions","organizations_url":"https://api.github.com/users/wchen-r7/orgs","repos_url":"https://api.github.com/users/wchen-r7/repos","events_url":"https://api.github.com/users/wchen-r7/events{/privacy}","received_events_url":"https://api.github.com/users/wchen-r7/received_events","type":"User","site_admin":false},"body":"## Intro\r\n\r\nThis PR allows the module writer to leave something in the notes field to keep track of interesting traits about reliability, side effects, and stability, so that in the future these can be searched/identified programmatically. I have also included two examples (alpc_taskscheduler & pimcore_creds_sqli) to help us understand how these should be used.\r\n\r\nThe traits function more like tags, and for starters, we're tracking:\r\n\r\n**Stability**\r\n\r\n| Constant         | Description    |\r\n| -------------- | ------------- |\r\n| CRASH_SAFE  | Module will not crash the service |\r\n| CRASH_SERVICE_RESTARTS | Module will crash the service, but it will restart |\r\n| CRASH_SERVICE_DEAD | Module will crash the service, and remain down |\r\n| CRASH_OS_RESTARTS | Module will crash the OS, but it will restart |\r\n| CRASH_OS_DEAD | Module will crash the OS, and remain down |\r\n| SERVICE_RESOURCE_LOSS | Module causes a resource to be unavailable for the service |\r\n| OS_RESOURCE_LOSS | Module causes a resource to be unavailable for the OS |\r\n\r\n**Side Effects**\r\n\r\n| Constant         | Description    |\r\n| -------------- | ------------- |\r\n| PAYLOAD_ON_DISK | Module leaves a payload or a dropper on the target machine |\r\n| CONFIG_CHANGES | Module modifies some config file |\r\n| MALICIOUS_INPUT_IN_LOG | Module leaves malicious input in a log |\r\n| LOCKOUTS | Modules may cause an account to lock out |\r\n| SCREEN_EFFECTS | Module shows something on the screen that a human may notice |\r\n\r\n**Reliability**\r\n\r\n| Constant         | Description    |\r\n| -------------- | ------------- |\r\n| FIRST_ATTEMPT_FAIL | The module may fail for the first attempt |\r\n| REPEATABLE_SESSION | The module is expected to get a session every time it runs |\r\n\r\n\r\n## Verification\r\n\r\n- [ ] Do: ```rm db/modules_metadata_base.json ~/.msf4/store/modules_metadata.json```\r\n- [ ] Do: ```ruby ./msfconsole -q -x \"irb -e framework.modules.refresh_cache_from_module_files; exit\"```\r\n- [ ] Open `~/.msf4/store/modules_metadata.json` and check that:\r\n\r\nexploit_windows/local/alpc_taskscheduler comes with these in the notes:\r\n\r\n```\r\n    \"notes\": {\r\n      \"Stability\": [\r\n        \"os-resource-loss\"\r\n      ],\r\n      \"Reliability\": [\r\n        \"repeatable-session\"\r\n      ]\r\n    }\r\n```\r\n\r\nAnd pimcore_creds_sqli comes with:\r\n\r\n```\r\n    \"notes\": {\r\n      \"SideEffects\": [\r\n        \"malicious-input-in-log\"\r\n      ]\r\n    }\r\n```\r\n","created_at":"2018-09-27T00:23:55Z","updated_at":"2018-09-27T00:51:47Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8a29928203032676fb2b634528dcb00a47b4cfbd","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":125500911,"node_id":"MDU6TGFiZWwxMjU1MDA5MTE=","url":"https://api.github.com/repos/rapid7/metasploit-framework/labels/feature","name":"feature","color":"bfe5bf","default":false},{"id":103436071,"node_id":"MDU6TGFiZWwxMDM0MzYwNzE=","url":"https://api.github.com/repos/rapid7/metasploit-framework/labels/library","name":"library","color":"fad8c7","default":false},{"id":757242099,"node_id":"MDU6TGFiZWw3NTcyNDIwOTk=","url":"https://api.github.com/repos/rapid7/metasploit-framework/labels/msf5","name":"msf5","color":"c5def5","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/rapid7/metasploit-framework/pulls/10707/commits","review_comments_url":"https://api.github.com/repos/rapid7/metasploit-framework/pulls/10707/comments","review_comment_url":"https://api.github.com/repos/rapid7/metasploit-framework/pulls/comments{/number}","comments_url":"https://api.github.com/repos/rapid7/metasploit-framework/issues/10707/comments","statuses_url":"https://api.github.com/repos/rapid7/metasploit-framework/statuses/583874d370d25c934222c98ec3dd5d0dabe220f0","head":{"label":"wchen-r7:module_quality_attributes_place_holders","ref":"module_quality_attributes_place_holders","sha":"583874d370d25c934222c98ec3dd5d0dabe220f0","user":{"login":"wchen-r7","id":1170914,"node_id":"MDQ6VXNlcjExNzA5MTQ=","avatar_url":"https://avatars2.githubusercontent.com/u/1170914?v=4","gravatar_id":"","url":"https://api.github.com/users/wchen-r7","html_url":"https://github.com/wchen-r7","followers_url":"https://api.github.com/users/wchen-r7/followers","following_url":"https://api.github.com/users/wchen-r7/following{/other_user}","gists_url":"https://api.github.com/users/wchen-r7/gists{/gist_id}","starred_url":"https://api.github.com/users/wchen-r7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wchen-r7/subscriptions","organizations_url":"https://api.github.com/users/wchen-r7/orgs","repos_url":"https://api.github.com/users/wchen-r7/repos","events_url":"https://api.github.com/users/wchen-r7/events{/privacy}","received_events_url":"https://api.github.com/users/wchen-r7/received_events","type":"User","site_admin":false},"repo":{"id":3789747,"node_id":"MDEwOlJlcG9zaXRvcnkzNzg5NzQ3","name":"metasploit-framework","full_name":"wchen-r7/metasploit-framework","private":false,"owner":{"login":"wchen-r7","id":1170914,"node_id":"MDQ6VXNlcjExNzA5MTQ=","avatar_url":"https://avatars2.githubusercontent.com/u/1170914?v=4","gravatar_id":"","url":"https://api.github.com/users/wchen-r7","html_url":"https://github.com/wchen-r7","followers_url":"https://api.github.com/users/wchen-r7/followers","following_url":"https://api.github.com/users/wchen-r7/following{/other_user}","gists_url":"https://api.github.com/users/wchen-r7/gists{/gist_id}","starred_url":"https://api.github.com/users/wchen-r7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/wchen-r7/subscriptions","organizations_url":"https://api.github.com/users/wchen-r7/orgs","repos_url":"https://api.github.com/users/wchen-r7/repos","events_url":"https://api.github.com/users/wchen-r7/events{/privacy}","received_events_url":"https://api.github.com/users/wchen-r7/received_events","type":"User","site_admin":false},"html_url":"https://github.com/wchen-r7/metasploit-framework","description":"Metasploit Framework","fork":true,"url":"https://api.github.com/repos/wchen-r7/metasploit-framework","forks_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/forks","keys_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/keys{/key_id}","collaborators_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/teams","hooks_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/hooks","issue_events_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/issues/events{/number}","events_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/events","assignees_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/assignees{/user}","branches_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/branches{/branch}","tags_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/tags","blobs_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/git/refs{/sha}","trees_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/git/trees{/sha}","statuses_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/statuses/{sha}","languages_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/languages","stargazers_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/stargazers","contributors_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/contributors","subscribers_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/subscribers","subscription_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/subscription","commits_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/commits{/sha}","git_commits_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/git/commits{/sha}","comments_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/comments{/number}","issue_comment_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/issues/comments{/number}","contents_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/contents/{+path}","compare_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/compare/{base}...{head}","merges_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/merges","archive_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/downloads","issues_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/issues{/number}","pulls_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/pulls{/number}","milestones_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/milestones{/number}","notifications_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/labels{/name}","releases_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/releases{/id}","deployments_url":"https://api.github.com/repos/wchen-r7/metasploit-framework/deployments","created_at":"2012-03-21T18:19:05Z","updated_at":"2018-04-23T14:36:26Z","pushed_at":"2018-09-26T23:55:02Z","git_url":"git://github.com/wchen-r7/metasploit-framework.git","ssh_url":"git@github.com:wchen-r7/metasploit-framework.git","clone_url":"https://github.com/wchen-r7/metasploit-framework.git","svn_url":"https://github.com/wchen-r7/metasploit-framework","homepage":"http://www.metasploit.com/","size":371035,"stargazers_count":8,"watchers_count":8,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":5,"open_issues":0,"watchers":8,"default_branch":"master"}},"base":{"label":"rapid7:master","ref":"master","sha":"3edd17bc28ce14593c47aa383e401b9bcef575c2","user":{"login":"rapid7","id":1013671,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwMTM2NzE=","avatar_url":"https://avatars1.githubusercontent.com/u/1013671?v=4","gravatar_id":"","url":"https://api.github.com/users/rapid7","html_url":"https://github.com/rapid7","followers_url":"https://api.github.com/users/rapid7/followers","following_url":"https://api.github.com/users/rapid7/following{/other_user}","gists_url":"https://api.github.com/users/rapid7/gists{/gist_id}","starred_url":"https://api.github.com/users/rapid7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rapid7/subscriptions","organizations_url":"https://api.github.com/users/rapid7/orgs","repos_url":"https://api.github.com/users/rapid7/repos","events_url":"https://api.github.com/users/rapid7/events{/privacy}","received_events_url":"https://api.github.com/users/rapid7/received_events","type":"Organization","site_admin":false},"repo":{"id":2293158,"node_id":"MDEwOlJlcG9zaXRvcnkyMjkzMTU4","name":"metasploit-framework","full_name":"rapid7/metasploit-framework","private":false,"owner":{"login":"rapid7","id":1013671,"node_id":"MDEyOk9yZ2FuaXphdGlvbjEwMTM2NzE=","avatar_url":"https://avatars1.githubusercontent.com/u/1013671?v=4","gravatar_id":"","url":"https://api.github.com/users/rapid7","html_url":"https://github.com/rapid7","followers_url":"https://api.github.com/users/rapid7/followers","following_url":"https://api.github.com/users/rapid7/following{/other_user}","gists_url":"https://api.github.com/users/rapid7/gists{/gist_id}","starred_url":"https://api.github.com/users/rapid7/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/rapid7/subscriptions","organizations_url":"https://api.github.com/users/rapid7/orgs","repos_url":"https://api.github.com/users/rapid7/repos","events_url":"https://api.github.com/users/rapid7/events{/privacy}","received_events_url":"https://api.github.com/users/rapid7/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/rapid7/metasploit-framework","description":"Metasploit Framework","fork":false,"url":"https://api.github.com/repos/rapid7/metasploit-framework","forks_url":"https://api.github.com/repos/rapid7/metasploit-framework/forks","keys_url":"https://api.github.com/repos/rapid7/metasploit-framework/keys{/key_id}","collaborators_url":"https://api.github.com/repos/rapid7/metasploit-framework/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/rapid7/metasploit-framework/teams","hooks_url":"https://api.github.com/repos/rapid7/metasploit-framework/hooks","issue_events_url":"https://api.github.com/repos/rapid7/metasploit-framework/issues/events{/number}","events_url":"https://api.github.com/repos/rapid7/metasploit-framework/events","assignees_url":"https://api.github.com/repos/rapid7/metasploit-framework/assignees{/user}","branches_url":"https://api.github.com/repos/rapid7/metasploit-framework/branches{/branch}","tags_url":"https://api.github.com/repos/rapid7/metasploit-framework/tags","blobs_url":"https://api.github.com/repos/rapid7/metasploit-framework/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/rapid7/metasploit-framework/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/rapid7/metasploit-framework/git/refs{/sha}","trees_url":"https://api.github.com/repos/rapid7/metasploit-framework/git/trees{/sha}","statuses_url":"https://api.github.com/repos/rapid7/metasploit-framework/statuses/{sha}","languages_url":"https://api.github.com/repos/rapid7/metasploit-framework/languages","stargazers_url":"https://api.github.com/repos/rapid7/metasploit-framework/stargazers","contributors_url":"https://api.github.com/repos/rapid7/metasploit-framework/contributors","subscribers_url":"https://api.github.com/repos/rapid7/metasploit-framework/subscribers","subscription_url":"https://api.github.com/repos/rapid7/metasploit-framework/subscription","commits_url":"https://api.github.com/repos/rapid7/metasploit-framework/commits{/sha}","git_commits_url":"https://api.github.com/repos/rapid7/metasploit-framework/git/commits{/sha}","comments_url":"https://api.github.com/repos/rapid7/metasploit-framework/comments{/number}","issue_comment_url":"https://api.github.com/repos/rapid7/metasploit-framework/issues/comments{/number}","contents_url":"https://api.github.com/repos/rapid7/metasploit-framework/contents/{+path}","compare_url":"https://api.github.com/repos/rapid7/metasploit-framework/compare/{base}...{head}","merges_url":"https://api.github.com/repos/rapid7/metasploit-framework/merges","archive_url":"https://api.github.com/repos/rapid7/metasploit-framework/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/rapid7/metasploit-framework/downloads","issues_url":"https://api.github.com/repos/rapid7/metasploit-framework/issues{/number}","pulls_url":"https://api.github.com/repos/rapid7/metasploit-framework/pulls{/number}","milestones_url":"https://api.github.com/repos/rapid7/metasploit-framework/milestones{/number}","notifications_url":"https://api.github.com/repos/rapid7/metasploit-framework/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/rapid7/metasploit-framework/labels{/name}","releases_url":"https://api.github.com/repos/rapid7/metasploit-framework/releases{/id}","deployments_url":"https://api.github.com/repos/rapid7/metasploit-framework/deployments","created_at":"2011-08-30T06:13:20Z","updated_at":"2018-09-27T00:25:57Z","pushed_at":"2018-09-27T00:23:55Z","git_url":"git://github.com/rapid7/metasploit-framework.git","ssh_url":"git@github.com:rapid7/metasploit-framework.git","clone_url":"https://github.com/rapid7/metasploit-framework.git","svn_url":"https://github.com/rapid7/metasploit-framework","homepage":"https://www.metasploit.com/","size":361262,"stargazers_count":13604,"watchers_count":13604,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":true,"forks_count":7200,"mirror_url":null,"archived":false,"open_issues_count":591,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":7200,"open_issues":591,"watchers":13604,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/rapid7/metasploit-framework/pulls/10707"},"html":{"href":"https://github.com/rapid7/metasploit-framework/pull/10707"},"issue":{"href":"https://api.github.com/repos/rapid7/metasploit-framework/issues/10707"},"comments":{"href":"https://api.github.com/repos/rapid7/metasploit-framework/issues/10707/comments"},"review_comments":{"href":"https://api.github.com/repos/rapid7/metasploit-framework/pulls/10707/comments"},"review_comment":{"href":"https://api.github.com/repos/rapid7/metasploit-framework/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/rapid7/metasploit-framework/pulls/10707/commits"},"statuses":{"href":"https://api.github.com/repos/rapid7/metasploit-framework/statuses/583874d370d25c934222c98ec3dd5d0dabe220f0"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"wvu-r7"}}