# ChangeLog

## Version 0.4.2 _(April 26, 2013)_

- Options
  - Added ```--https-only``` to disallow downgrades to HTTP when the seed URL uses HTTPS.
  - Added ```--exclude-page``` to exclude pages whose bodies match the given patterns.
  - Added ```--version``` to show version info.
- Updated exceptions thrown by the framework, removed ```Arachni::Exceptions```
    namespace and replaced it with the ```Arachni::Error``` base exception from
    which all component specific exceptions inherit.
- RPC
  - Handlers
      - ```opts``` -- Now presents the ```RPC::Server::ActiveOptions```
           interface which actively configures certain options across multiple system
           components.
      - ```service``` -- Updated with the following convenience methods in order
            to provide a simpler interface for users who don't wish to bother with
            the more specialised handlers (```opts```,```modules```, ```framework```, etc.):
          - ```#errors``` -- Returns the contents of the error log.
          - ```#scan``` -- Configures and runs the scan.
          - ```#progress``` -- Aggregates progress information.
          - ```#busy?``` -- Checks whether the scan is still in progress.
          - ```#pause``` -- Pauses the scan (delegated to ```RPC::Server::Framework#pause```).
          - ```#resume``` -- Resumes the scan (delegated to ```RPC::Server::Framework#resume```).
          - ```#abort_and_report``` -- Cleans up the framework and returns the report.
          - ```#abort_and_report_as``` -- Cleans up the framework and returns the
            result of the specified report component.
          - ```#status``` -- Returns the status of the Instance.
          - ```#report``` -- Returns the scan report as a ```Hash```.
          - ```#report_as``` --  Returns the scan report in one of the available formats (as a ```String```).
          - ```#shutdown``` -- Shuts down the Instance/stops the scan.
      - ```framework``` -- Clients no longer need to call ```framework.clean_up``` unless cancelling a running scan.
  - Protocol -- Now supports both ```Marshal``` and ```YAML``` automatically.
      - ```Marshal``` by default since it's many times faster than ```YAML```.
      - ```YAML``` as an automatic fallback in order to maintain backwards compatibility and ease of integration with 3rd parties.
          - Updated to use the Ruby-default ```Psych``` engine.
  - ```Framework```
      - Updated gathering of slave status -- once a slave is done it reports back to the master.
      - Clean-up happens automatically, clients no longer need to call ```#clean_up``` (like previously mentioned).
      - Slave instances now buffer their logged issues and report them to the Master in batches.
      - ```#issues``` now returns the first variation of each issue to provide more info/context.
  - ```Dispatcher```
      - Added ```#workload_score``` returning the workload score of a Dispatcher as a ```Float```.
      - Workload score calculation no longer uses CPU/RAM resource usage (since
        that data is not available on all platforms) but instead the amount of running
        instances and node weight.
- Trainer -- Added a hard-limit for trainings per page to avoid time-consuming loops.
- Spider
  - Updated to retry a few times when the server fails to respond.
      - Failed requests returned by ```#failures```.
- Framework
  - Updated to retry a few times when the server fails to respond when trying to
        request a page for an audit.
      - Failed requests returned by ```#failures```.
  - The following methods have been updated to enforce scope criteria:
      - ```#audit_page```
      - ```#push_to_page_queue```
      - ```#push_to_url_queue```
- HTTP
  - Fixed corruption of binary response bodies due to aggressive sanitization.
  - Custom-404 page detection updated to:
      - Fallback to a word-difference ratio of the refined responses if straight comparison fails.
      - Keep a limited cache of signatures to lower memory consumption.
- ```Arachni::Element::Capabilities::Auditable```
  - Added ```#use_anonymous_auditor``` to alleviate the need of assigning
    a custom auditor when scripting.
  - Updated ```#submit``` and ```#audit``` to default to ```#use_anonymous_auditor```
    when no auditor has been provided.
- Plugins
  - AutoLogin -- No longer URI escapes the given arguments. [Issue #314]
  - Profiler -- No longer a member of the default plugins.
  - Meta-analysis
      - Timing-attacks: Updated to add a remark to affected issues about the
            suboptimal state of the server while the issue was identified.
      - Discovery: Updated to add a remark to affected issues about the
            extreme similarities between issues of similar type.
  - Removed
      - Manual-verification meta-analysis -- That plugin is now redundant, functionality
        now handled by other components/layers.
- Analysis techniques
  - Taint -- Updated to add remarks for issues that require verification.
  - Timeout -- Updated to dramatically decrease memory consumption and improve reliability/accuracy.
      - No longer schedules element audits for the end of the scan but looks
        for candidates along with the other audit requests.
      - Candidates are verified at the end of each page audit.
      - Makes sure that candidates are deduplicated upon discovery.
      - Added a 3rd phase: Initial candidates which pass verification are verified again.
- Modules
  - General
      - Updated module names along with some descriptions and issue names.
      - Limited the maximum number of issues to 25 for the following recon modules:
          - Captcha
          - CVS/SVN users
          - E-mails
          - HTML-objects
          - Interesting Responses
      - XSS in script tag
          - Requires manual verification -- Arachni can't inspect the JS runtime.
          - Added remark to inform users about the above.
      - Path traversal
            - Added more payloads for Windows.
      - OS command injection
            - Added more payloads for Windows.
  - Added
      - Auto-complete for password form fields.
  - Removed
      - ```xss_uri``` compatibility module.
- Plugin
    - Proxy
        - Added the ```session_token``` option allowing users to restrict access
            to their proxy session using a configurable token.
        - Updated panel and control URLs.
- Reports
    - If a directory has been passed as an ```outfile``` option the
        report will be written under that directory using the default ```outfile```
        value as a filename.
    - Updated report descriptions.
    - Updated to include Issue remarks.
- Issues
    - Added attribute ```remarks``` holding a ```Hash``` of remarks about
        that issue with the entity which made the remark as _key_ and an ```Array```
        of remarks as _value_.
    - Added method ```#add_remark```, allowing new remarks to be added to the ```Issue```.
- Executables
    - ```arachni_script``` -- Updated to expect a single script and pass ARGV along.
    - ```arachni_rpc```
        - Massive code clean-up.
        - Updated to use the new simplified RPC API.
        - Updated to support the new high-performance distribution options.
        - Removed status messages, shows only the issue list.
- Added
  - Cache
      - ```Arachni::Cache::Preference``` -- Performs soft pruning based on a
        preference determined by a given block.
  - Buffer classes
      - ```Arachni::Buffer::Base``` -- Buffer base class.
      - ```Arachni::Buffer::AutoFlush``` -- A buffer implementation which flushes
        itself when it gets full or a number of fill-up attempts is reached between flushes.
- Removed
      - Web User Interface -- The new interface is a
        [project of its own](https://github.com/Arachni/arachni-ui-web) and not
        part of the framework -- will appear in the packages only, not the Gems.

## Version 0.4.1.2 _(November 3, 2012)_
- HTTP
  - Updated the custom 404 detection algorithm to use less memory by storing only
    the hashes of the signatures instead of the signatures themselves.
  - ```cookie_string``` option is now decoded before being parsed into a ```Cookie``` object.
- ```Cookie#expires_to_time``` bugfixed to return ```nil``` if expiry time is "0".
- ```Arachni::URI.cheap_parse``` -- Updated to sanitize the encoding of each parameter name and value individually. [Issue #303]
- Plugins
  - Proxy
      - Fixed regression caused by the Parser requiring the HTTP Response to include the original Request.
      - Fixed SSL interceptor behavior on redirects -- now delegates everything to the user facing Proxy.
- Modules
  - Audit
      - CSRF -- Updated to mark forms with a detected nonce as safe.

## Version 0.4.1.1 _(October 14, 2012)_
- ```Auditor#log``` and ```Auditor#log_remote_file``` bugfixed to pass a Hash of the response headers instead of a String -- also solving another bug causing response bodies not to be logged in the Issues. [Issue #294]
- ```Issue``` -- Response headers are now **always** Hash.
- Reports
  - HTML -- Removed response headers handling code and added the option to not include HTTP response bodies. [Issue #296]
  - XML -- Removed response headers handling code and added the option to not include HTTP response bodies. [Issue #296]
- HTTP debugging output now includes Response data. [Issue #297]
- Executables
  - ```arachni_rpcd_monitor``` -- Laxed standards enforced on the Dispatcher URL argument. [Issue #293]
- Path extractors
  - Added path extractor for the ```area``` HTML tag (```href``` attribute). [Issue #300]

## Version 0.4.1 _(October 2, 2012)_
- License -- Moved from GPLv2 to Apache License Version 2.
- Major refactoring
    - ```Arachni::Parser::Element::Auditable``` and ```Arachni::Module::Auditor```.
        - Moved analysis techniques from ```Auditor``` to ```Auditable``` to enable per element audits and analysis
          in order to increase audit granularity and ease scripting.
        - ```Auditor``` methods now simply iterate over candidate elements and delegate analysis to them.
    - Updated URL normalization methods and added caching to resource intensive parsing operations,
      leading to overall improvements, especially during the initial crawling process. (**New**)
    - Moved from Ruby's URI lib to ```Arachni::URI```. (**New**)
    - Project-wide code clean-up, documentation and style improvements.
    - Replaced ```Set``` with ```Arachni::BloomFilter```, where possible, to keep memory consumption to a minimum and speed up look-up comparisons.
    - Namespace cleanup
        - Moved ```Parser::Element``` classes directly under ```Arachni```;
        - Moved ```Parser::Page``` class directly under ```Arachni```;
        - Moved ```Auditable``` and ```Mutable``` under ```Element::Capabilities```;
        - Added ```Element::Capabilities::Refreshable``` -- refreshes the input values of a link/form;
        - Moved analysis techniques out of ```Analysis``` and directly under ```Element::Capabilities::Auditable```;
        - Added constants for each element directly under the ```Arachni``` namespace to facilitate easy access ( like ```Arachni::Link```, ```Arachni::Form```, etc.)
- Framework - Can be configured to detect logouts and re-login between page audits. (**New**)
- Options
    - Removed
        - ```--http-harvest-last```
    - Added
        - ```--login-check-url``` --  A URL used to verify that the scanner is still logged in to the web application.
        - ```--login-check-pattern``` -- A pattern used against the body of the 'login-check-url' to verify that the scanner is still logged in to the web application.
        - ```--auto-redundant``` -- Ignores a specified amount of URLs with identical query parameter names.
        - ```--fuzz-methods``` -- Audits links, forms and cookies using both ```GET``` and ```POST``` HTTP methods.
        - ```--audit-cookies-extensively``` -- Submits all links and forms of the page along with the cookie permutations.
        - ```--cookie-string``` -- Allows the specification of cookies as a string in the form of: ```name=value; name2=value2```
        - ```--exclude-vectors``` -- Excludes vectors (parameters), by name, from the audit.
        - ```--exclude-binaries``` -- Excludes pages with non text-based content-types from the audit.
- Dispatcher
    - Added modularity by way of support for handler components whose API can be exposed over RPC (under ```rpcd_handlers/```).
- Modules - Every single one has been cleaned up and have had RSpec tests added.
    - Scheduling - Expensive modules are now scheduled to be run after cheaper ones
        of similar type and only audit elements missed by the cheaper ones.
    - API
        - Updated to provide access to running plugins.
        - Updated remote file detection and logging helpers to improve performance and accuracy in case of custom 404s.
        - Audit operations by default follow redirects.
        - Issue de-duplication has been updated to be a lot more aggressive for
            issues discovered by manipulating inputs, variations have been restricted to just 1.
    - Unencrypted password forms -- Checks for non-nil form fields before iterating. [Issue #136]
    - SSN -- Improved regexp and logging. [Issue #170]
    - Insecure cookies -- Logs cookies without the 'secure' flag. (**New**)
    - HttpOnly cookies -- Logs cookies without the 'HttpOnly' flag. (**New**)
    - SQL injection -- Now ignores irrelevant error messages in order to reduce false-positives.
    - XSS -- Improved detection accuracy.
    - RFI -- Added a seed URL without a protocol.
    - Path traversal -- Added seeds with file:// URLs and for Tomcat webapps.
    - Added (**New**)
        - Session fixation
    - Lots of information updates for things such as remedy guidances and references. (Thanks to Samil Kumar)
- Plugins - Every single one has been cleaned up and have had RSpec tests added.
    - AutoLogin
        - Added a mandatory verifier regexp to make sure that the login was successful. (**New**)
        - Now configures the ```Framework``` to be able to detect logouts and re-login during the audit. (**New**)
    - Proxy
        - Fixed typo in code which prevented headers from being properly forwarded which
            resulted in non-existent content-types which prevented proper parsing. [Issue #135]
        - Updated to use the framework HTTP interface instead of Net::HTTP
        - Now injects a handy little control panel into each responce which allows recording of
            login sequences and inspection of discovered pages/elements.
    - VectorFeed -- Reads in vector data from which it creates elements to be audited.
      Can be used to perform extremely specialized/narrow audits on a per vector/element basis.
      Useful for unit-testing or a gazillion other things. (**New**)
    - Script -- Loads and runs an external Ruby script under the scope of a plugin, used for debugging and general hackery. (**New**)
- Extras
    - All modules under <tt>/extras</tt> had to be removed because they distributed GPLv3 licensed content.
- HTTP
    - Improved detection of custom 404 pages.
    - Now accepts a global timeout (```--http-timeout```) in milliseconds.
    - Updated ```#add_on_queue``` hook (called by ```#queue```) which allows HTTP requests to be intercepted and modified before being fired.
    - Fixed burst average requests/second calculation.
    - Implemented a Cookiejar. (**New**)
    - Removed tagging of requests with the system-wide seed.
    - Added a maximum queue size limit -- once the request limit has been reached the queued requests will be fired in order to unload the queue.
    - Added ```#sandbox``` -- isolates the given block from the rest of the HTTP env and executes it.
- Spider -- Re-written, much cleaner design and code. (**New**)
    - Ignores path parameters to avoid infinite loops (like ```http://stuff.com/deep/path;jsessid=deadbeef```).
- Parser
    - Removed clutter by moving parsing of elements into their respective classes (Form, Link, Cookie).
    - Replaced sanitization hacks with Nokogiri's sanitization -- cleaner code, better performance.
    - Form
      - Nonce tokens are being automatically detected and refreshed before submission.
- WebUI
    - Removed the AutoDeploy add-on -- no sense maintaining it since the WebUI is about to be scrapped (and no-one used it anyways).
- Tests
    - Added full test suite using RSpec. (**New**)
- Added
    - ```Arachni::Session``` - Session manager, handling session maintenance, login sequences, log-out detection etc.
    - ```Arachni::URI``` class to handle URI parsing and normalization -- Uses Random Replacement caches to maintain low-latency.
    - ```Arachni::BloomFilter``` class, a ```Hash```-based, lightweight Bloom-filter implementation requiring minimum storage space and providing fast look-ups.
    - ```Arachni::Cache``` classes
        - ```LeastCostReplacement``` -- Least Cost Replacement cache implementation.
        - ```LeastRecentlyUsed``` -- Least Recently Used cache implementation.
        - ```RandomReplacement``` -- Random Replacement cache implementation.
- Executables
    - ```arachni_web_autostart``` -- removed calls to ```xterm``` and ```xdg-open```.
    - ```arachni_script``` -- Pre-loads Arachni's libraries and loads and runs a series of Ruby scripts. (**New**)
    - ```arachni_console``` -- Pre-loads Arachni's libraries and loads and runs an IRB shell with persistent history and tab-completion. (**New**)

## Version 0.4.0.3 _(March 12, 2012)_
- Gemspec -- Updated ```do_sqlite3``` dependency. ( [kost](https://github.com/kost) ) [#166]

## Version 0.4.0.1 _(January 9, 2012)_
- Reports
   - XML -- added missing Issue attributes
- Added draconian run-time exception handling to all components.

## Version 0.4 _(January 7, 2012)_
- RPC Infrastructure (**New**)
   - Dispatcher
      - Dispatchers can now be connected to form a High Performance Grid and share scan workloads.
      - Users can now specify a range of ports to be used for spawned Instances. [Issue #76]
      - Now checks for signal availability before using <em>trap()</em>. (**New**) [Issue #71]
      - Now uses Windows compliant filenames for the logs. (**New**) [Issue #70]
   - Ruby's XMLRPC libraries have been replaced by <a href="https://github.com/Arachni/arachni-rpc">Arachni-RPC</a>,
    a light-weight and high-performance custom client/server RPC implementation.
- Added <em>extras</em> directory holding components that are considered too specialised, dangerous or in some way unsuitable for
    utilising without explicit user interaction. (**New**)
    - Modules
       - Recon
          - SVN Digger dirs -- Finds directories, based on wordlists created from open source repositories (Herman Stevens)
          - SVN Digger files -- Finds files, based on wordlists created from open source repositories (Herman Stevens)
          - RAFT dirs (Herman Stevens)
          - RAFT files (Herman Stevens)
- Framework
   - <em>stats()</em>
      - Fixed bug that caused the <em>current_page</em> to not be refreshed during timing attacks.
      - Fixed bug that caused a less than 100% progress at the end of scans. [Issue #86]
      - If the crawler is limited by link-count it will be taken under consideration.
   - Significantly reduced memory footprint by re-scheduling the consumption of Trainer generated pages.
- User Interfaces
   - WebUI
      - Sinatra
         - Updated to use the light-weight and high-performance <a href="http://code.macournoyer.com/thin/">Thin</a> server.
         - Added <a href="https://github.com/raggi/async_sinatra">async_sinatra</a> to allow for asynchronous responses. (**New**)
      - Added support for HTTP Basic Auth (**New**)
      - Updated screens to provide access to HPG (High Performance Grid) features:
         - Home
            - Added option to enable HPG mode on a per scan basis (**New**)
         - Dispatchers
            - Added node information (Nickname, Pipe ID, Weight, Cost). (**New**)
            - Added neighbour inspection per dispatcher. (**New**)
            - Added log inspection per dispatcher. (**New**)
            - Improved accuracy of instance statuses.
            - Added percentages for memory and CPU usage per instance. (**New**)
         - Instance (scan management)
            - Provides an average of all stats of scanner instances. (**New**)
            - Added per instance progress bars. (**New**)
            - Added per instance statuses. (**New**)
            - Added est. remaining time. (**New**)
         - Settings
            - Added proxy settings. [Issue #74] (**New**)
            - Added settings for restrict and extend paths options. (**New**)
      - Fixed small typo in "Settings" screen. [Issue #62]
      - Reports -- AFR report is now served straight-up to avoid corruption. [Issue #55]
      - Add-ons -- Updated to use the new async libraries.
      - Added help buttons. (**New**)
   - CLI
      - Improved interrupt handler:
         - It now exits in a cleaner fashion and is more obedient.
         - Added est. remaining time. (**New**)
         - Added progressbar. (**New**)
- HTTP client
   - Added support for including custom headers. [Issue #90] (**New**)
   - Refactored in order for all methods to use <em>request()</em>.
   - Bug-fixed cookie preservation.
- Spider
   - spider-first option removed and set to true by default.
   - Added "--depth" parameter. (**New**)
   - Fixed incorrect implementation of the inclusion filters.
   - Now follows "Location" headers directly and bypasses the trainer.
   - Added support for extending the crawl scope with a file that contains newline separated URLs. (**New**) [Issue #67]
   - Added support for restricting the crawl scope with a file that contains newline separated URLs. (**New**)
   - Made more resilient against malformed/non-standard URLs. [Issue #57]
- Parser
   - Encoded URLs with fragments right after the host caused URI.parse to fail. [Issue #66]
   - Auditable elements
      - If there are 2 or more password fields in a form an extra variation is added with
        the same inputs for all passwords in case it's a 'please repeat your password' thing. (**New**) [Issue #59]
- Plugins
   - API -- Added <code>distributable?()</code> and <code>merge()</code> class methods which declare
        if a plug-in can be distributed to all instances when running in Grid mode and merge an array of its own results respectively.
      - Distributable plug-ins:
         - Content-Types
         - Cookie collector
         - Healthmap
         - Profiler
         - AutoThrottle
   - Profiler -- Removed response time logging and moved it to <em>defaults</em>.
   - Proxy -- Fixed bug which caused some headers not to be forwarded. [Issue #64]
   - Discovery (accompanied by appropriate report formatters). (**New**) [Issue #81]
      - Performs anomaly detection on issues logged by discovery modules and warns of the possibility of false positives where applicable.
   - Added the 'defaults' subdirectory which contains plug-ins that should be loaded by default.
   - Added: (**New**)
      - ReScan -- It uses the AFR report of a previous scan to extract the sitemap in order to avoid a redundant crawl.
      - BeepNotify -- Beeps when the scan finishes.
      - LibNotify -- Uses the libnotify library to send notifications for each discovered issue and a summary at the end of the scan.
      - EmailNotify -- Sends a notification (and optionally a report) over SMTP at the end of the scan.
      - Manual verification -- Flags issues that require manual verification as untrusted in order to reduce the signal-to-noise ratio.
      - Resolver -- Resolves vulnerable hostnames to IP addresses.
- Reports
   - HTML report
      - Fixed replay forms to include URL params in the <em>action</em> attribute. [Issue #73]
      - Refactored and broken into erb partials.
      - Organised subsections into tabs. (**New**)
      - HTML responses of logged Issues are now rendered on-demand. [Issue #88]
      - Added graph showing issue trust totals. (**New**)
      - The main issue graph shows trusted and untrusted issues in 2 different series.
      - ALl JavaScript and CSS code is now included in the report for off-line viewing.
      - Removed manual-verification piechart, obsoleted by the trust chart.
      - Replaced Highcharts with jqPlot due to licensing reasons.
      - Removed false-positive reporting -- was causing segfaults on Mac OSX. [Issue #126]
   - Added (**New**)
      - JSON -- Exports the audit results as a JSON serialized Hash.
      - Marshal -- Exports the audit results as a Marshal serialized Hash.
      - YAML -- Exports the audit results as a YAML serialized Hash.
- Heeded Ruby's warnings (<em>ruby -w</em>).
- Modules
   - API
      - Auditor
         - Added helper methods for checking the existence of remote files and directories. (**New**)
         - Added helper methods for issue logging. (**New**)
   - Refactored modules replacing duplicate code with the new helper methods.
   - Audit
      - XSS -- Updated to actually inject an element, parse the HTML response and
        look for that element before logging in order to eliminate false positives. [Issue #59]
      - Path traversal -- Fixed broken regular expressions
      - SQL Injection -- Fixed broken regular expressions
      - XSS Path -- Updated to verify the injection using HTML parsing
      - XSS URI -- Made obsolete and will be removed from future releases -- loads and runs XSS Path instead.
   - Recon
      - Added MixedResource detection module (<a href="http://googleonlinesecurity.blogspot.com/2011/06/trying-to-end-mixed-scripting.html">Reference</a>) (**New**) [Issue #56]
- Meta-Modules
   - Have all been converted to regular plug-ins in order to make distribution across the Grid easier.
- Dependencies
   - Added
      - Arachni-RPC
      - EventMachine
      - EM Synchrony
      - AsyncSinatra
   - Updated
      - Typhoeus => 0.3.3
      - Sys-proctable => 0.9.1
      - Nokogiri => 1.5.0
      - Sinatra => 1.3.1
      - Datamapper => 1.1.0
      - Json => 1.6.1
      - Datamapper SQLite adapter => 1.1.0
      - Net-SSH => 2.2.1
   - Removed
      - Rack-CSRF
      - JSON (Provided by DataMapper)

## Version 0.3 _(July 26, 2011)_
- HTTP client
   - Fixed race condition in timeout options.
- Spider (**New**)
   - Replaced Anemone with a lightweight custom-written spider.
- WebUI
   - Major refactoring.
   - Improved handling of connection errors during scan progress updates.
   - Added support for add-ons. (**New**)
   - Add-ons (**New**)
      - Scan scheduler
      - Auto-deploy -- Automatically converts any SSH enabled Linux box into an Arachni Dispatcher.
   - Fixed bug when IP addresses are used, instead of hostnames, for the Dispatchers.
- Parser
   - Form action attributes are now sanitized using iterative URI decoding.
   - Link variables are extracted before URL sanitization takes place in order to keep values with URL-encoded characters intact.
   - The link variables of any current page's URL are now pushed to 'page.links'.
- Auditor
   - Abstracted the rDiff audit methods from the "Blind (rDiff) SQL Injection" module and moved them in the Auditor.
   - Timing attack technique has been greatly improved and all timing attacks are now scheduled to run at the end of the scan.
- Modules
   - API
      - Added the "redundant()" method -- Allows a module to prevents itself from auditting elements that have been previously logged by other modules.
      - Modules are now passed an instance of the framework.
   - Audit
      - Blind (rDiff) SQL Injection
         - Updated to support all element types (Links, Forms, Cookies, Headers).
         - Optimized using the new "redundant()" method -- It will no longer audit elements that have been previously logged by the 'sqli' or 'sqli_blind_rdiff' modules.
      - OS command injection (timing)
         - Optimized using the new "redundant()" method -- It will no longer audit elements that have been previously logged by the 'os_cmd_injection' module.
      - Code injection (timing)
         - Optimized using the new "redundant()" method -- It will no longer audit elements that have been previously logged by the 'code_injection' module.

## Version 0.2.4 _(July 1, 2011)_
- HTTP
   - Implemented a 10s time-out [Issue #40]
- Command Line Interface
   - The interrupt handler (Ctrl+C) now presents the option to generate reports mid-scan. [Issue #41]
   - Added a counter of timed-out requests in the stats.
- WebUI
   - The "Replay" form's action attribute now contains the full URL, including params. [Issue #38]
   - Fixed path clash that caused the "shutdown" button in the Dispatchers screen not to work. [Issue #39]
   - Fixed mix-up of output messages from different instances. [Issue #36]
   - Added a counter of timed-out requests in "Instance" screens.
- External
    - Metasploit
       - Updated SQL injection exploit module to work with SQLmap 0.9. [Issue #37]
- Reports
   - HTML
      - Fixed yet another error condition occuring with broken encodings. [Issue #31]
- Auditor
   - Timing attacks now have a "control" to verify that the server is indeed alive i.e. requests won't time-out by default.

## Version 0.2.3 _(May 22, 2011)_
- WebUI
   - Added connection cache for XMLRPC server instances to remove HTTPS handshake overhead and take advantage of keep-alive support.
   - Added initial support for management of multiple Dispatchers.
- XMLRPC Client->Dispatch Server
   - Updated to always use SSL [Issue #28]
   - Added per instance authentication tokens [Issue #28]
- Modules
   - Audit
      - Path traversal: added double encoded traversals [Issue #29]
- Reports
   - HTML
      - Fixed "invalid byte sequence in UTF-8" using iconv [Issue #27]
      - Added false positive reporting. Data are encrypted using 256bit AES (with AES primitives encrypted using RSA) and sent over HTTPS. [Issue #30]
   - Metareport
      - Fixed bug caused by not explicitly closed file handle.

## Version 0.2.2.2 _(March 22, 2011)_
- Added "arachni_web_autostart" under bin -- Automatically starts all systems required by the WebUI and makes shutting down everything easier too (Original by: Brandon Potter <bpotter8705@gmail.com>)
- Overrided Nokogiri to revert to UTF-8 when it comes across an unknown charset instead of throwing exceptions
- Dependency versions are now defined explicitly [Issue #23]
- Updated to Sinatra v1.2.1
- HTTP
   - Disabled peer verification on SSL [Issue #19]
   - Replaced callbacks with the new _Observable_ mixin (also updated components to use the new conventions)
- WebUI
   - Plug-in options are preserved [Issue #19]
   - Check-all now skips disabled checkboxes
   - Report info is stored in a database [Issue #19]
   - Reports are now displayed in descending order based on scan completion datetime [Issue #19]
   - Any existing reports will be migrated into the new database [Issue #19]
- XMLRPC service
   - Fixed segfault on forced shutdown when spider-first was enabled
- Plug-ins
   - AutoLogin now registers its results
- Reports -- Added formatters for the AutoLogin [Issue #19] and Profiler plug-ins
   - HMTL
      - Fixed exception on empty issue list
      - Fixed encoding exceptions (cheers to Chris Weber <chris@casaba.com>)
- Path extractors
   - Generic -- fixed error on invalid encoding sequences
- Modules
   - Recon
       - Directory listing -- Now skips non-200 pages because it used to log false positives on redirections
- Plug-ins
   - Added Profiler -- Performs taint analysis (with benign inputs) and response time analysis

## Version 0.2.2.1 _(February 13, 2011)_
- Web UI v0.1-pre (Utilizing the Client - Dispatch-server XMLRPC architecture) (**New**)
   - Basically a front-end to the XMLRPC client
   - Support for parallel scans
   - Report management
   - Can be used to monitor and control any running Dispatcher
- Changed classification from "Vulnerabilities" to "Issues" (**New**)
- Improved detection of custom 404 pages.
- Reports updated to show plug-in results.
- Updated framework-wide cookie handling.
- Added parameter flipping functionality ( cheers to Nilesh Bhosale <nilesh at gslab.com >)
- Major performance optimizations (4x faster in most tests)
   - All modules now use asynchronous requests and are optimized for highest traffic efficiency
   - All index Arrays have been replaced by Sets to minimize look-up times
   - Mark-up parsing has been reduced dramatically
   - File I/O blocking in modules has been eliminated
- Crawler
   - Improved performance
   - Added '--spider-first" option  (**New**)
- Substituted the XMLRPC server with an XMLRPC dispatch server  (**New**)
   - Multiple clients
   - Parallel scans
   - Extensive logging
   - SSL cert based client authentication
- Added modules  (**New**)
   - Audit
      - XSS in event attributes of HTML elements
      - XSS in HTML tags
      - XSS in HTML 'script' tags
      - Blind SQL injection using timing attacks
      - Blind code injection using timing attacks (PHP, Ruby, Python, JSP, ASP.NET)
      - Blind OS command injection using timing attacks (*nix, Windows)
   - Recon
      - Common backdoors    -- Looks for common shell names
      - .htaccess LIMIT misconfiguration
      - Interesting responses   -- Listens to all traffic and logs interesting server messages
      - HTML object grepper
      - E-mail address disclosure
      - US Social Security Number disclosure
      - Forceful directory listing
- Added plugins  (**New**)
   - Dictionary attacker for HTTP Auth
   - Dictionary attacker for form based authentication
   - Cookie collector    -- Listens to all traffic and logs changes in cookies
   - Healthmap -- Generates sitemap showing the health of each crawled/audited URL
   - Content-types -- Logs content-types of server responses aiding in the identification of interesting (possibly leaked) files
   - WAF (Web Application Firewall) Detector
   - MetaModules -- Loads and runs high-level meta-analysis modules pre/mid/post-scan
      - AutoThrottle -- Dynamically adjusts HTTP throughput during the scan for maximum bandwidth utilization
      - TimeoutNotice -- Provides a notice for issues uncovered by timing attacks when the affected audited pages returned unusually high response times to begin with.</br>
           It also points out the danger of DoS attacks against pages that perform heavy-duty processing.
      - Uniformity -- Reports inputs that are uniformly vulnerable across a number of pages hinting to the lack of a central point of input sanitization.

- New behavior on Ctrl+C
   - The system continues to run in the background instead of pausing
   - The user is presented with an auto-refreshing report and progress stats
- Updated module API
   - Timing/delay attacks have been abstracted and simplified via helper methods
   - The modules are given access to vector skipping decisions
   - Simplified issue logging
   - Added the option of substring matching instead of regexp matching in order to improve performance.
   - Substituted regular expression matching with substring matching wherever possible.
- Reports:
   - Added plug-in formatter components allowing plug-ins to have a say in how their results are presented (**New**)
   - New HTML report (Cheers to [Christos Chiotis](mailto:chris@survivetheinternet.com) for designing the new HTML report template.) (**New**)
   - Updated reports to include Plug-in results:
      - XML report
      - Stdout report
      - Text report

## Version 0.2.1 _(November 25, 2010)_
- Major performance improvements
- Major system refactoring and code clean-up
- Major module API refactoring providing even more flexibility regarding element auditing and manipulation
- Integration with the Metasploit Framework via: (**New**)
   - ArachniMetareport, an Arachni report specifically designed to provide WebApp context to the [Metasploit](http://www.metasploit.com/) framework.
   - Arachni plug-in for the [Metasploit](http://www.metasploit.com/) framework, used to load the ArachniMetareport in order to provide advanced automated and manual exploitation of WebApp vulnerabilities.
   - Advanced generic WebApp exploit modules for the [Metasploit](http://www.metasploit.com/) framework, utilized either manually or automatically by the Arachni MSF plug-in.
- Improved Blind SQL Injection module, significantly less requests per audit.
- XMLRPC server (**New**)
- XMLRPC CLI client (**New**)
- NTLM authentication support (**New**)
- Support for path extractor modules for the Spider (**New**)
- Path extractors: (**New**)
   - Generic -- extracts URLs from arbitrary text
   - Anchors
   - Form actions
   - Frame sources
   - Links
   - META refresh
   - Script 'src' and script code
   - Sitemap
- Plug-in support -- allowing the framework to be extended with virtually any functionality (**New**).
- Added plug-ins: (**New**)
   - Passive proxy
   - Automated login
- Added modules: (**New**)
   - Audit
      - XPath injection
      - LDAP injection
   - Recon
      - CVS/SVN user disclosure
      - Private IP address disclosure
      - Robot file reader (in the Common Files module)
      - XST
      - WebDAV detection
      - Allowed HTTP methods
      - Credit card number disclosure
      - HTTP PUT support
- Extended proxy support (SOCKS4, SOCKS4A, SOCKS5, HTTP/1.1 and HTTP/1.0). (**New**)


## Version 0.2 _(October 14, 2010)_

- Improved output.
  - Increased context awareness.
  - Extensive debugging output capabilities.
  - Added simple stats at the end of scans.
- Rewritten HTTP interface.
  - High-performance asynchronous HTTP requests.
  - Adjustable HTTP request concurrency limit.
  - Adjustable HTTP response harvests.
  - Custom 404 page detection.
- Optimized Trainer subsystem.
  - Invoked when it is most likely to detect new vectors.
  - Can be invoked by individual modules on-demand,
      forcing Arachni to learn from the HTTP responses they will cause -- a great asset to Fuzzers.
- Refactored and improved Auditor.
  - No redundant requests, except when required by modules.
  - Better parameter handling.
  - Speed optimizations.
  - Added differential analysis to determine whether a vulnerability needs manual verification.
- Refactored and improved module API.
  - Major API clean up.
  - With facilities providing more control and power over the audit process.
  - Significantly increased ease of development.
  - Modules have total flexibility and control over input combinations,
      injection values and their formating -- if they need to.
  - Modules can opt for sync or async HTTP requests (Default: async)
- Improved interrupt handling
  - Scans can be paused/resumed at any time.
  - In the event of a system exit or user cancellation reports will still be created
      using whatever data were gathered during runtime.
  - When the scan is paused the user will be presented with the results gathered thus far.
- Improved configuration profile handling
  - Added pre-configured profiles
  - Multiple profiles can be loaded at once
  - Ability to show running profiles as CLI arguments
- Overall module improvements and optimizations.
- New modules for:
  - Blind SQL Injection, using reverse-diff analysis.
  - Trainer, probes all inputs of a given page, in order to uncover new input vectors, and forces Arachni to learn from the responses.
  - Unvalidated redirects.
  - Forms that transmit passwords in clear text.
  - CSRF, implementing 4-pass rDiff analysis to drastically reduce noise.
- Overall report improvements and optimizations.
- New reports
  - Plain text report
  - XML report