Plugin Directory

Changeset 2540542


Ignore:
Timestamp:
06/01/2021 08:08:14 AM (5 years ago)
Author:
ethicalhack3r
Message:

New 1.15.2 version release

Location:
wpscan
Files:
24 edited
1 copied

Legend:

Unmodified
Added
Removed
  • wpscan/tags/1.15.2/app/Checks/System.php

    r2511419 r2540542  
    2525    // Current running events.
    2626    public $current_running = '';
     27
    2728    /**
    2829     * A list of registered checks.
     
    156157                echo "<div class='notice notice-error'><p>$msg</p></div>";
    157158            }
    158         }
    159     }
    160 
    161     /**
    162      * List vulnerabilities in the report.
    163      *
    164      * @param object $check - The check instance.
    165      *
    166      * @access public
    167      * @return string
    168      * @since 1.0.0
    169      *
    170      */
    171     public function list_check_vulnerabilities( $instance ) {
    172         $vulnerabilities = $instance->get_vulnerabilities();
    173         $count           = $instance->get_vulnerabilities_count();
    174         $ignored         = $this->parent->get_ignored_vulnerabilities();
    175 
    176         $not_checked_text = __( 'Not checked yet. Click the Run button to run a scan', 'wpscan' );
    177 
    178         if ( ! isset( $vulnerabilities ) ) {
    179             echo esc_html( $not_checked_text );
    180         } elseif ( empty( $vulnerabilities ) || 0 === $count ) {
    181             echo esc_html( $instance->success_message() );
    182         } else {
    183             $list = array();
    184 
    185             foreach ( $vulnerabilities as $item ) {
    186                 if ( in_array( $item['id'], $ignored, true ) ) {
    187                     continue;
    188                 }
    189 
    190                 $html  = "<div class='vulnerability'>";
    191                 $html .= "<span class='vulnerability-severity'>";
    192                 $html .= "<span class='wpscan-" . esc_attr( $item['severity'] ) . "'>" . esc_html( $item['severity'] ) ."</span>";
    193                 $html .= '</span>';
    194                 $html .= "<div class='vulnerability-title'>" . wp_kses( $item['title'], array( 'a' => array( 'href' => array() ) ) ) . '</div>';
    195                 $html .= "<div class='vulnerability-remediation'> <a href='" . $item['remediation_url'] . "' target='_blank'>Click here for further info</a></div>";
    196                 $html .= '</div>';
    197                 $list[] = $html;
    198             }
    199 
    200             echo join( '<br>', $list );
    201         }
    202     }
    203 
    204     /**
    205      * Return vulnerabilities in the report.
    206      *
    207      * @param object $check - The check instance.
    208      *
    209      * @access public
    210      * @return string
    211      * @since 1.14.4
    212      *
    213      */
    214     public function get_check_vulnerabilities( $instance ) {
    215         $vulnerabilities = $instance->get_vulnerabilities();
    216         $count           = $instance->get_vulnerabilities_count();
    217         $ignored         = $this->parent->get_ignored_vulnerabilities();
    218 
    219         $not_checked_text = __( 'Not checked yet. Click the Run button to run a scan', 'wpscan' );
    220 
    221         if ( ! isset( $vulnerabilities ) ) {
    222             return esc_html( $not_checked_text );
    223         } elseif ( empty( $vulnerabilities ) || 0 === $count ) {
    224             return esc_html( $instance->success_message() );
    225         } else {
    226             $list = array();
    227 
    228             foreach ( $vulnerabilities as $item ) {
    229                 if ( in_array( $item['id'], $ignored, true ) ) {
    230                     continue;
    231                 }
    232 
    233                 $html   = "<div class='vulnerability'>";
    234                 $html  .= "<div class='vulnerability-severity'>";
    235                 $html  .= "<span class='wpscan-" . esc_attr( $item['severity'] ) . "'>" . esc_html( $item['severity'] ) . '</span>';
    236                 $html  .= '</div>';
    237                 $html  .= "<div class='vulnerability-title'>" . wp_kses( $item['title'], array( 'a' => array( 'href' => array() ) ) ) . '</div>';
    238                 $html  .= '</div>';
    239                 $list[] = $html;
    240             }
    241 
    242             return join( '<br>', $list );
    243159        }
    244160    }
  • wpscan/tags/1.15.2/app/Plugin.php

    r2529086 r2540542  
    1515class Plugin {
    1616    // Settings.
    17     public $OPT_API_TOKEN = 'wpscan_api_token';
     17    public $OPT_API_TOKEN         = 'wpscan_api_token';
    1818    public $OPT_SCANNING_INTERVAL = 'wpscan_scanning_interval';
    19     public $OPT_SCANNING_TIME = 'wpscan_scanning_time';
    20     public $OPT_IGNORE_ITEMS = 'wpscan_ignore_items';
     19    public $OPT_SCANNING_TIME     = 'wpscan_scanning_time';
     20    public $OPT_IGNORE_ITEMS      = 'wpscan_ignore_items';
     21    public $OPT_DISABLE_CHECKS    = 'wpscan_disable_security_checks';
    2122
    2223    // Account.
     
    555556
    556557        // Security checks.
    557         $this->report['security-checks'] = array();
    558 
    559         foreach ( $this->classes['checks/system']->checks as $id => $data ) {
    560             $data['instance']->perform();
    561             $this->report['security-checks'][ $id ]['vulnerabilities'] = array();
    562 
    563             if ( $data['instance']->vulnerabilities ) {
    564                 $this->report['security-checks'][ $id ]['vulnerabilities'] = $data['instance']->get_vulnerabilities();
    565 
    566                 $this->maybe_fire_issue_found_action( 'security-check', $id, $this->report['security-checks'][ $id ] );
     558        if ( get_option( $this->OPT_DISABLE_CHECKS, array() ) !== '1' ) {
     559            $this->report['security-checks'] = array();
     560
     561            foreach ( $this->classes['checks/system']->checks as $id => $data ) {
     562                $data['instance']->perform();
     563                $this->report['security-checks'][ $id ]['vulnerabilities'] = array();
     564
     565                if ( $data['instance']->vulnerabilities ) {
     566                    $this->report['security-checks'][ $id ]['vulnerabilities'] = $data['instance']->get_vulnerabilities();
     567
     568                    $this->maybe_fire_issue_found_action( 'security-check', $id, $this->report['security-checks'][ $id ] );
     569                }
    567570            }
    568         }
     571      }
    569572
    570573        // Caching.
  • wpscan/tags/1.15.2/app/Report.php

    r2481423 r2540542  
    6565
    6666    /**
     67     * Get vulnerability status based on fixed_in
     68     *
     69     * @since 1.15.2
     70     * @access public
     71     * @return string
     72     */
     73    public function status( $vulnerability ) {
     74        return empty( $vulnerability->fixed_in )
     75            ? __( 'We are not aware of a fix for this vulnerability.', 'wpscan' )
     76            : sprintf( __( 'This vulnerability was fixed in version %s. We recommend that you update as soon as possible.', 'wpscan' ), esc_html( $vulnerability->fixed_in ) );
     77    }
     78
     79    /**
     80     * HTML markup for the vulnerability details
     81     *
     82     * @since 1.15.2
     83     * @access public
     84     * @return string
     85     */
     86    public function vulnerability_output( $vulnerability ) {
     87    $html  = '<div class="vulnerability">';
     88        $html .= '<p class="vulnerability-title"><b>' . esc_html( $vulnerability->title ) . '</b></p>';
     89        $html .= '<p class="vulnerability-status">' . $this->status( $vulnerability ) . '</p>';
     90        $html .= $this->vulnerability_severity( $vulnerability );
     91        $html .= '<br /><p class="vulnerability-link"><a href="' . esc_url( 'https://wpscan.com/vulnerability/' . $vulnerability->id ) . '" target="_blank">Click here for further details</a></p>';
     92        $html .= '</div>';
     93
     94        return $html;
     95    }
     96
     97    /**
    6798     * List vulnerabilities on screen
    6899     *
     
    100131            usort( $report['vulnerabilities'], array( 'self', 'sort_vulnerabilities' ) );
    101132
    102             foreach ( $report['vulnerabilities'] as $item ) {
    103                 $id = 'security-checks' === $type ? $item['id'] : $item->id;
     133            foreach ( $report['vulnerabilities'] as $vulnerability ) {
     134                $id = 'security-checks' === $type ? $vulnerability['id'] : $vulnerability->id;
    104135
    105136                if ( in_array( $id, $ignored, true ) ) {
     
    107138                }
    108139
    109                 $html  = '<div class="vulnerability">';
    110                 $html .= $this->vulnerability_severity( $item );
    111                 $html .= '<a href="' . esc_url( 'https://wpscan.com/vulnerability/' . $item->id ) . '" target="_blank">';
    112                 $html .= $this->parent->get_sanitized_vulnerability_title( $item );
    113                 $html .= '</a>';
     140                $list[] = $this->vulnerability_output( $vulnerability );
     141            }
     142
     143            echo empty( $list ) ? $null_text : join( '<br>', $list );
     144
     145        } else {
     146            echo esc_html( $null_text );
     147        }
     148    }
     149
     150    /**
     151     * List security check vulnerabilities in the report.
     152     * This should be merged with the list_api_vulnerabilities() function,
     153     * in the future, if anyone can figure out how...
     154     *
     155     * @param object $check - The check instance.
     156     *
     157     * @access public
     158     * @return string
     159     * @since 1.0.0
     160     *
     161     */
     162    public function list_security_check_vulnerabilities( $instance ) {
     163        $vulnerabilities = $instance->get_vulnerabilities();
     164        $count           = $instance->get_vulnerabilities_count();
     165        $ignored         = $this->parent->get_ignored_vulnerabilities();
     166
     167        $not_checked_text = __( 'Not checked yet. Click the Run button to run a scan', 'wpscan' );
     168
     169        if ( ! isset( $vulnerabilities ) ) {
     170            echo esc_html( $not_checked_text );
     171        } elseif ( empty( $vulnerabilities ) || 0 === $count ) {
     172            echo esc_html( $instance->success_message() );
     173        } else {
     174            $list = array();
     175
     176            foreach ( $vulnerabilities as $vulnerability ) {
     177                if ( in_array( $vulnerability['id'], $ignored, true ) ) {
     178                    continue;
     179                }
     180
     181                $html  = "<div class='vulnerability'>";
     182                $html .= "<p class='vulnerability-title'>" . wp_kses( $vulnerability['title'], array( 'a' => array( 'href' => array() ) ) ) . '</p><br />';
     183                $html .= "<p class='vulnerability-severity'>";
     184                $html .= "<span class='wpscan-" . esc_attr( $vulnerability['severity'] ) . "'>" . esc_html( $vulnerability['severity'] ) ." Severity</span>";
     185                $html .= '</p>';
     186                $html .= "<br /><br /><p class='vulnerability-link'><a href='" . esc_url( $vulnerability['remediation_url'] ) . "' target='_blank'>Click here for further details</a></p>";
    114187                $html .= '</div>';
    115188
     
    117190            }
    118191
    119             echo empty( $list ) ? $null_text : join( '<br>', $list );
    120 
    121         } else {
    122             echo esc_html( $null_text );
    123         }
    124     }
     192            echo join( '<br>', $list );
     193        }
     194    }
     195
    125196
    126197    /**
     
    156227        if ( isset( $vulnerability->cvss->severity ) ) {
    157228            $severity = $vulnerability->cvss->severity;
    158             $html    .= "<span class='wpscan-" . esc_attr( $severity ) . "'>" . esc_html( $severity ) . '</span>';
     229            $html    .= "<span class='wpscan-" . esc_attr( $severity ) . "'>" . esc_html( $severity ) . ' Severity</span>';
    159230        }
    160231
  • wpscan/tags/1.15.2/app/Settings.php

    r2511419 r2540542  
    8383        register_setting( $this->page, $this->parent->OPT_SCANNING_INTERVAL, 'sanitize_text_field' );
    8484        register_setting( $this->page, $this->parent->OPT_SCANNING_TIME, 'sanitize_text_field' );
     85        register_setting( $this->page, $this->parent->OPT_DISABLE_CHECKS, array( 'type' => 'boolean', 'default' => '0' ) );
    8586
    8687        $section = $this->page . '_section';
     
    113114            __( 'Scanning Time', 'wpscan' ),
    114115            array( $this, 'field_scanning_time' ),
     116            $this->page,
     117            $section
     118        );
     119
     120        add_settings_field(
     121            $this->parent->OPT_DISABLE_CHECKS,
     122            __( 'Disable Security Checks', 'wpscan' ),
     123            array( $this, 'field_disable_security_checks' ),
    115124            $this->page,
    116125            $section
     
    323332
    324333        echo '</p><br/>';
     334    }
     335    /**
     336     * Disable security checks field
     337     *
     338     * @since 1.15.2
     339     * @access public
     340     * @return string
     341     */
     342    public function field_disable_security_checks() {
     343        $opt     = $this->parent->OPT_DISABLE_CHECKS;
     344
     345        $value   = get_option( $opt, array() );
     346        $checked = $value === '1' ? 'checked' : null;
     347
     348        echo "<input name='{$opt}' type='checkbox' $checked value='1' >";
    325349    }
    326350
  • wpscan/tags/1.15.2/app/Summary.php

    r2511419 r2540542  
    2626        add_action( 'admin_init', array( $this, 'add_meta_box_summary' ) );
    2727        add_action( 'wp_ajax_wpscan_check_now', array( $this, 'ajax_check_now' ) );
    28         add_action( 'wp_ajax_wpscan_security_check_now', array( $this, 'ajax_security_check_now' ) );
     28
     29        if ( get_option( $this->parent->OPT_DISABLE_CHECKS, array() ) !== '1' ) {
     30          add_action( 'wp_ajax_wpscan_security_check_now', array( $this, 'ajax_security_check_now' ) );
     31        }
     32
    2933        add_action( 'wp_ajax_' . $this->parent->WPSCAN_TRANSIENT_CRON, array( $this, 'ajax_doing_cron' ) );
    3034    }
     
    162166
    163167    /**
    164      * Ajax scurity check now
     168     * Ajax security check now
    165169     *
    166170     * @return void
  • wpscan/tags/1.15.2/app/ignoreVulnerabilities.php

    r2429586 r2540542  
    128128            $this->list_vulnerabilities_to_ignore( 'themes', $this->parent->get_theme_slug( $name, $details ) );
    129129        }
    130 
    131         foreach ( $this->parent->classes['checks/system']->checks as $id => $data ) {
    132             $this->list_vulnerabilities_to_ignore( 'security-checks', $id );
     130   
     131    if ( get_option( $this->parent->OPT_DISABLE_CHECKS, array() ) !== '1' ) {
     132            foreach ( $this->parent->classes['checks/system']->checks as $id => $data ) {
     133                $this->list_vulnerabilities_to_ignore( 'security-checks', $id );
     134            }
    133135        }
    134136    }
  • wpscan/tags/1.15.2/assets/css/style.css

    r2452411 r2540542  
    162162.vulnerability-severity {
    163163  float: left;
    164   min-width: 60px;
    165   margin-right: 20px;
    166 }
    167 
    168 .vulnerability-title {
     164  min-width: 100px;
     165}
     166
     167.vulnerability-title .vulnerability-status .vulnerability-link {
    169168  float: left;
    170169}
     
    176175  border-radius: 3px;
    177176  font-size: 11px;
    178   margin: 6px 0px 0px 0px;
    179177  line-height: 19px;
    180   min-width: 60px;
     178  min-width: 100px;
    181179  color: #4e645a;
    182180  background: #c6e1d5;
  • wpscan/tags/1.15.2/assets/js/download-report.js

    r2529086 r2540542  
    361361    const topTableBorder = is_wordpress_section ? 'WPTableLine' : 'tableLine';
    362362
    363     // name
    364 
     363    // Name
    365364    table.table.body[1].push({
    366365      text: 'Name',
     
    370369    table.table.widths.push(149);
    371370
    372     // version
     371    // Version
    373372    if (!is_security_checks) {
    374373      table.table.body[1].push({
     
    408407        let row = [];
    409408
    410         // Item title
    411         let itemTitle = $(this).find('.plugin-title strong').text().trim();
    412 
     409        // Item name
     410        let itemTitle = is_wordpress_section ? 'WordPress' : $(this).find('.plugin-title strong').text().trim();
     411       
    413412        if ($(this).find('.plugin-title .item-closed').length) {
    414413          itemTitle =
     
    426425
    427426        // Item version
     427        let itemVersion = is_wordpress_section ? $(this).find('#wordpress-version').text().trim() : $(this).find('.plugin-title .item-version span').text().trim();
     428
    428429        if (!is_security_checks) {
    429430          row.push({
    430             text: $(this)
    431               .find('.plugin-title .item-version span')
    432               .text()
    433               .trim(),
     431            text: itemVersion,
    434432            style: 'resTable',
    435433            borderColor,
     
    451449            .each(function () {
    452450              let item = $(this).clone();
    453               let linkText =
    454                 item.find('.vulnerability-severity span').text().trim() + ' - ';
    455               item.find('.vulnerability-severity span').remove();
    456               linkText = linkText + item.text().trim();
    457               linkText = linkText.charAt(0).toUpperCase() + linkText.slice(1);
    458 
    459               col.stack.push({
    460                 text: linkText,
    461                 link: $(this).attr('href'),
    462                 style: 'resTable',
    463                 lineHeight: 2,
    464                 borderColor,
    465               });
     451              let title     = item.find('.vulnerability-title').text().trim();
     452              let status    = item.find('.vulnerability-status').text().trim();
     453              let severity  = item.find('.vulnerability-severity span').text().trim();
     454              let link_text = item.find('.vulnerability-link').text().trim();
     455              let link_href = item.find('.vulnerability-link a').attr('href');
     456
     457              let vulnerability_text = [
     458                { text: title, style: 'resTable' },
     459                { text: status, style: 'resTable' },
     460                { text: severity.charAt(0).toUpperCase() + severity.slice(1), style: 'resTable' },
     461                { text: link_text, link: link_href, style: 'resTable' }
     462              ]
     463
     464              col.stack.push( vulnerability_text );
    466465            });
    467466
     
    479478      });
    480479
    481     // push the table
     480    // Push the table
    482481    is_wordpress_section
    483482      ? wpscanReport.content.push(wordpressTable)
  • wpscan/tags/1.15.2/readme.txt

    r2529086 r2540542  
    44Requires at least: 3.4
    55Tested up to: 5.6
    6 Stable tag: 1.15.1
     6Stable tag: 1.15.2
    77Requires PHP: 5.5
    88License: GPLv3
     
    9090
    9191== Changelog ==
     92
     93= 1.15.2 =
     94* Improve HTML and PDF report output
     95* Disable security checks setting
     96* Some refactoring
    9297
    9398= 1.15.1 =
  • wpscan/tags/1.15.2/security-checks/debuglog-files/check.php

    r2511419 r2540542  
    6969
    7070            if ( 200 === $code ) {
    71                 $this->add_vulnerability( __( 'A publicly accessible debug.log file was found in', 'wpscan' ) . " <a href='$url' target='_blank'>$url</a>.", 'high', sanitize_title( $file ), 'https://blog.wpscan.com/2021/03/18/wordpress-debug-log-files.html' );
     71                $this->add_vulnerability( __( 'A publicly accessible debug.log file was found in', 'wpscan' ) . " <a href='$url' target='_blank'>$url</a>", 'high', sanitize_title( $file ), 'https://blog.wpscan.com/2021/03/18/wordpress-debug-log-files.html' );
    7272            }
    7373        }
  • wpscan/tags/1.15.2/views/report.php

    r2511419 r2540542  
    5151                <th scope="row" class="check-column" style="text-align: center">
    5252                  <?php echo $this->get_status( 'wordpress', get_bloginfo( 'version' ) ) ?></th>
    53                 <td class="plugin-title column-primary">
    54                   <strong>WordPress</strong>
    55                   <span class='item-version'>
    56                     <?php echo sprintf( __( 'Version <span>%s</span>', 'wpscan' ), get_bloginfo( 'version' ) ) ?>
    57                   </span>
     53                <td class="wordpress-title column-primary">
     54                  <strong>WordPress <span id="wordpress-version"><?php echo get_bloginfo( 'version' ) ?></span></strong>
    5855                </td>
    5956                <td class="vulnerabilities">
     
    9491                 
    9592                  <td class="plugin-title column-primary">
    96                     <strong><?php echo esc_html($details['Name']) ?></strong>
     93                    <strong><?php echo esc_html( $details['Name'] ) ?></strong>
    9794                    <span class='item-version'>
    9895                      <?php echo sprintf( __( 'Version <span>%s</span>', 'wpscan' ), esc_html($details['Version']) ) ?>
     
    163160          </div>
    164161
    165           <div class="wpscan-report-section security-checks">
    166             <h3><?php _e('Security Checks', 'wpscan') ?></h3>
    167 
    168             <table class="wp-list-table widefat striped plugins">
    169                 <thead>
    170                     <tr>
    171                         <td scope="col" class="manage-column check-column"></td>
    172                         <th scope="col" class="manage-column column-name column-primary"><?php _e('Name', 'wpscan') ?></th>
    173                         <th scope="col" class="manage-column column-description"><?php _e('Result', 'wpscan') ?></th>
    174                         <th scope="col" class="manage-column column-description"><?php _e('Actions', 'wpscan') ?></th>
    175                     </tr>
    176                 </thead>
    177                 <tbody id="report-themes">
    178                     <?php foreach ( $this->parent->classes['checks/system']->checks as $id => $data ) : ?>
    179                         <tr>
    180                             <th scope="row" class="check-column" style="text-align: center">
    181                               <?php echo $this->get_status('security-checks', $id) ?></th>
    182                             </th>
    183                             <td class="plugin-title column-primary">
    184                                 <strong title="<?php echo esc_attr($data['instance']->description()) ?>">
    185                                   <?php echo esc_html($data['instance']->title()) ?>
    186                                 </strong>
    187                             </td>
    188                             <td class="vulnerabilities">
    189                               <?php $this->parent->classes['checks/system']->list_check_vulnerabilities( $data['instance'] ) ?>
    190                             </td>
    191                             <td class="security-check-actions">
    192                                 <?php $this->parent->classes['checks/system']->list_actions($data['instance']) ?>
    193                                 <span class="spinner"></span>
    194                             </td>
    195                         </tr>
    196                     <?php endforeach; ?>
    197                 </tbody>
    198             </table>
    199           </div>
     162          <?php if ( get_option( $this->parent->OPT_DISABLE_CHECKS, array() ) !== '1' ) { ?>
     163
     164            <div class="wpscan-report-section security-checks">
     165              <h3><?php _e('Security Checks', 'wpscan') ?></h3>
     166
     167              <table class="wp-list-table widefat striped plugins">
     168                  <thead>
     169                      <tr>
     170                          <td scope="col" class="manage-column check-column"></td>
     171                          <th scope="col" class="manage-column column-name column-primary"><?php _e('Name', 'wpscan') ?></th>
     172                          <th scope="col" class="manage-column column-description"><?php _e('Result', 'wpscan') ?></th>
     173                          <th scope="col" class="manage-column column-description"><?php _e('Actions', 'wpscan') ?></th>
     174                      </tr>
     175                  </thead>
     176                  <tbody id="report-themes">
     177                      <?php foreach ( $this->parent->classes['checks/system']->checks as $id => $data ) : ?>
     178                          <tr>
     179                              <th scope="row" class="check-column" style="text-align: center">
     180                                <?php echo $this->get_status('security-checks', $id) ?></th>
     181                              </th>
     182                              <td class="plugin-title column-primary">
     183                                  <strong title="<?php echo esc_attr($data['instance']->description()) ?>">
     184                                    <?php echo esc_html( $data['instance']->title() ) ?>
     185                                  </strong>
     186                              </td>
     187                              <td class="vulnerabilities">
     188                                <?php $this->list_security_check_vulnerabilities( $data['instance'] ) ?>
     189                              </td>
     190                              <td class="security-check-actions">
     191                                  <?php $this->parent->classes['checks/system']->list_actions($data['instance']) ?>
     192                                  <span class="spinner"></span>
     193                              </td>
     194                          </tr>
     195                      <?php endforeach; ?>
     196                  </tbody>
     197              </table>
     198            </div>
     199
     200        <?php } ?>
    200201       
    201202          <?php if ( get_option( $this->parent->OPT_API_TOKEN ) ) { ?>
  • wpscan/tags/1.15.2/wpscan.php

    r2529086 r2540542  
    44 * Plugin URI:    http://wordpress.org/plugins/wpscan/
    55 * Description:   WPScan WordPress Security Scanner. Scans your system for security vulnerabilities listed in the WPScan Vulnerability Database.
    6  * Version:       1.15.1
     6 * Version:       1.15.2
    77 * Author:        WPScan Team
    88 * Author URI:    https://wpscan.com/
  • wpscan/trunk/app/Checks/System.php

    r2511419 r2540542  
    2525    // Current running events.
    2626    public $current_running = '';
     27
    2728    /**
    2829     * A list of registered checks.
     
    156157                echo "<div class='notice notice-error'><p>$msg</p></div>";
    157158            }
    158         }
    159     }
    160 
    161     /**
    162      * List vulnerabilities in the report.
    163      *
    164      * @param object $check - The check instance.
    165      *
    166      * @access public
    167      * @return string
    168      * @since 1.0.0
    169      *
    170      */
    171     public function list_check_vulnerabilities( $instance ) {
    172         $vulnerabilities = $instance->get_vulnerabilities();
    173         $count           = $instance->get_vulnerabilities_count();
    174         $ignored         = $this->parent->get_ignored_vulnerabilities();
    175 
    176         $not_checked_text = __( 'Not checked yet. Click the Run button to run a scan', 'wpscan' );
    177 
    178         if ( ! isset( $vulnerabilities ) ) {
    179             echo esc_html( $not_checked_text );
    180         } elseif ( empty( $vulnerabilities ) || 0 === $count ) {
    181             echo esc_html( $instance->success_message() );
    182         } else {
    183             $list = array();
    184 
    185             foreach ( $vulnerabilities as $item ) {
    186                 if ( in_array( $item['id'], $ignored, true ) ) {
    187                     continue;
    188                 }
    189 
    190                 $html  = "<div class='vulnerability'>";
    191                 $html .= "<span class='vulnerability-severity'>";
    192                 $html .= "<span class='wpscan-" . esc_attr( $item['severity'] ) . "'>" . esc_html( $item['severity'] ) ."</span>";
    193                 $html .= '</span>';
    194                 $html .= "<div class='vulnerability-title'>" . wp_kses( $item['title'], array( 'a' => array( 'href' => array() ) ) ) . '</div>';
    195                 $html .= "<div class='vulnerability-remediation'> <a href='" . $item['remediation_url'] . "' target='_blank'>Click here for further info</a></div>";
    196                 $html .= '</div>';
    197                 $list[] = $html;
    198             }
    199 
    200             echo join( '<br>', $list );
    201         }
    202     }
    203 
    204     /**
    205      * Return vulnerabilities in the report.
    206      *
    207      * @param object $check - The check instance.
    208      *
    209      * @access public
    210      * @return string
    211      * @since 1.14.4
    212      *
    213      */
    214     public function get_check_vulnerabilities( $instance ) {
    215         $vulnerabilities = $instance->get_vulnerabilities();
    216         $count           = $instance->get_vulnerabilities_count();
    217         $ignored         = $this->parent->get_ignored_vulnerabilities();
    218 
    219         $not_checked_text = __( 'Not checked yet. Click the Run button to run a scan', 'wpscan' );
    220 
    221         if ( ! isset( $vulnerabilities ) ) {
    222             return esc_html( $not_checked_text );
    223         } elseif ( empty( $vulnerabilities ) || 0 === $count ) {
    224             return esc_html( $instance->success_message() );
    225         } else {
    226             $list = array();
    227 
    228             foreach ( $vulnerabilities as $item ) {
    229                 if ( in_array( $item['id'], $ignored, true ) ) {
    230                     continue;
    231                 }
    232 
    233                 $html   = "<div class='vulnerability'>";
    234                 $html  .= "<div class='vulnerability-severity'>";
    235                 $html  .= "<span class='wpscan-" . esc_attr( $item['severity'] ) . "'>" . esc_html( $item['severity'] ) . '</span>';
    236                 $html  .= '</div>';
    237                 $html  .= "<div class='vulnerability-title'>" . wp_kses( $item['title'], array( 'a' => array( 'href' => array() ) ) ) . '</div>';
    238                 $html  .= '</div>';
    239                 $list[] = $html;
    240             }
    241 
    242             return join( '<br>', $list );
    243159        }
    244160    }
  • wpscan/trunk/app/Plugin.php

    r2529086 r2540542  
    1515class Plugin {
    1616    // Settings.
    17     public $OPT_API_TOKEN = 'wpscan_api_token';
     17    public $OPT_API_TOKEN         = 'wpscan_api_token';
    1818    public $OPT_SCANNING_INTERVAL = 'wpscan_scanning_interval';
    19     public $OPT_SCANNING_TIME = 'wpscan_scanning_time';
    20     public $OPT_IGNORE_ITEMS = 'wpscan_ignore_items';
     19    public $OPT_SCANNING_TIME     = 'wpscan_scanning_time';
     20    public $OPT_IGNORE_ITEMS      = 'wpscan_ignore_items';
     21    public $OPT_DISABLE_CHECKS    = 'wpscan_disable_security_checks';
    2122
    2223    // Account.
     
    555556
    556557        // Security checks.
    557         $this->report['security-checks'] = array();
    558 
    559         foreach ( $this->classes['checks/system']->checks as $id => $data ) {
    560             $data['instance']->perform();
    561             $this->report['security-checks'][ $id ]['vulnerabilities'] = array();
    562 
    563             if ( $data['instance']->vulnerabilities ) {
    564                 $this->report['security-checks'][ $id ]['vulnerabilities'] = $data['instance']->get_vulnerabilities();
    565 
    566                 $this->maybe_fire_issue_found_action( 'security-check', $id, $this->report['security-checks'][ $id ] );
     558        if ( get_option( $this->OPT_DISABLE_CHECKS, array() ) !== '1' ) {
     559            $this->report['security-checks'] = array();
     560
     561            foreach ( $this->classes['checks/system']->checks as $id => $data ) {
     562                $data['instance']->perform();
     563                $this->report['security-checks'][ $id ]['vulnerabilities'] = array();
     564
     565                if ( $data['instance']->vulnerabilities ) {
     566                    $this->report['security-checks'][ $id ]['vulnerabilities'] = $data['instance']->get_vulnerabilities();
     567
     568                    $this->maybe_fire_issue_found_action( 'security-check', $id, $this->report['security-checks'][ $id ] );
     569                }
    567570            }
    568         }
     571      }
    569572
    570573        // Caching.
  • wpscan/trunk/app/Report.php

    r2481423 r2540542  
    6565
    6666    /**
     67     * Get vulnerability status based on fixed_in
     68     *
     69     * @since 1.15.2
     70     * @access public
     71     * @return string
     72     */
     73    public function status( $vulnerability ) {
     74        return empty( $vulnerability->fixed_in )
     75            ? __( 'We are not aware of a fix for this vulnerability.', 'wpscan' )
     76            : sprintf( __( 'This vulnerability was fixed in version %s. We recommend that you update as soon as possible.', 'wpscan' ), esc_html( $vulnerability->fixed_in ) );
     77    }
     78
     79    /**
     80     * HTML markup for the vulnerability details
     81     *
     82     * @since 1.15.2
     83     * @access public
     84     * @return string
     85     */
     86    public function vulnerability_output( $vulnerability ) {
     87    $html  = '<div class="vulnerability">';
     88        $html .= '<p class="vulnerability-title"><b>' . esc_html( $vulnerability->title ) . '</b></p>';
     89        $html .= '<p class="vulnerability-status">' . $this->status( $vulnerability ) . '</p>';
     90        $html .= $this->vulnerability_severity( $vulnerability );
     91        $html .= '<br /><p class="vulnerability-link"><a href="' . esc_url( 'https://wpscan.com/vulnerability/' . $vulnerability->id ) . '" target="_blank">Click here for further details</a></p>';
     92        $html .= '</div>';
     93
     94        return $html;
     95    }
     96
     97    /**
    6798     * List vulnerabilities on screen
    6899     *
     
    100131            usort( $report['vulnerabilities'], array( 'self', 'sort_vulnerabilities' ) );
    101132
    102             foreach ( $report['vulnerabilities'] as $item ) {
    103                 $id = 'security-checks' === $type ? $item['id'] : $item->id;
     133            foreach ( $report['vulnerabilities'] as $vulnerability ) {
     134                $id = 'security-checks' === $type ? $vulnerability['id'] : $vulnerability->id;
    104135
    105136                if ( in_array( $id, $ignored, true ) ) {
     
    107138                }
    108139
    109                 $html  = '<div class="vulnerability">';
    110                 $html .= $this->vulnerability_severity( $item );
    111                 $html .= '<a href="' . esc_url( 'https://wpscan.com/vulnerability/' . $item->id ) . '" target="_blank">';
    112                 $html .= $this->parent->get_sanitized_vulnerability_title( $item );
    113                 $html .= '</a>';
     140                $list[] = $this->vulnerability_output( $vulnerability );
     141            }
     142
     143            echo empty( $list ) ? $null_text : join( '<br>', $list );
     144
     145        } else {
     146            echo esc_html( $null_text );
     147        }
     148    }
     149
     150    /**
     151     * List security check vulnerabilities in the report.
     152     * This should be merged with the list_api_vulnerabilities() function,
     153     * in the future, if anyone can figure out how...
     154     *
     155     * @param object $check - The check instance.
     156     *
     157     * @access public
     158     * @return string
     159     * @since 1.0.0
     160     *
     161     */
     162    public function list_security_check_vulnerabilities( $instance ) {
     163        $vulnerabilities = $instance->get_vulnerabilities();
     164        $count           = $instance->get_vulnerabilities_count();
     165        $ignored         = $this->parent->get_ignored_vulnerabilities();
     166
     167        $not_checked_text = __( 'Not checked yet. Click the Run button to run a scan', 'wpscan' );
     168
     169        if ( ! isset( $vulnerabilities ) ) {
     170            echo esc_html( $not_checked_text );
     171        } elseif ( empty( $vulnerabilities ) || 0 === $count ) {
     172            echo esc_html( $instance->success_message() );
     173        } else {
     174            $list = array();
     175
     176            foreach ( $vulnerabilities as $vulnerability ) {
     177                if ( in_array( $vulnerability['id'], $ignored, true ) ) {
     178                    continue;
     179                }
     180
     181                $html  = "<div class='vulnerability'>";
     182                $html .= "<p class='vulnerability-title'>" . wp_kses( $vulnerability['title'], array( 'a' => array( 'href' => array() ) ) ) . '</p><br />';
     183                $html .= "<p class='vulnerability-severity'>";
     184                $html .= "<span class='wpscan-" . esc_attr( $vulnerability['severity'] ) . "'>" . esc_html( $vulnerability['severity'] ) ." Severity</span>";
     185                $html .= '</p>';
     186                $html .= "<br /><br /><p class='vulnerability-link'><a href='" . esc_url( $vulnerability['remediation_url'] ) . "' target='_blank'>Click here for further details</a></p>";
    114187                $html .= '</div>';
    115188
     
    117190            }
    118191
    119             echo empty( $list ) ? $null_text : join( '<br>', $list );
    120 
    121         } else {
    122             echo esc_html( $null_text );
    123         }
    124     }
     192            echo join( '<br>', $list );
     193        }
     194    }
     195
    125196
    126197    /**
     
    156227        if ( isset( $vulnerability->cvss->severity ) ) {
    157228            $severity = $vulnerability->cvss->severity;
    158             $html    .= "<span class='wpscan-" . esc_attr( $severity ) . "'>" . esc_html( $severity ) . '</span>';
     229            $html    .= "<span class='wpscan-" . esc_attr( $severity ) . "'>" . esc_html( $severity ) . ' Severity</span>';
    159230        }
    160231
  • wpscan/trunk/app/Settings.php

    r2511419 r2540542  
    8383        register_setting( $this->page, $this->parent->OPT_SCANNING_INTERVAL, 'sanitize_text_field' );
    8484        register_setting( $this->page, $this->parent->OPT_SCANNING_TIME, 'sanitize_text_field' );
     85        register_setting( $this->page, $this->parent->OPT_DISABLE_CHECKS, array( 'type' => 'boolean', 'default' => '0' ) );
    8586
    8687        $section = $this->page . '_section';
     
    113114            __( 'Scanning Time', 'wpscan' ),
    114115            array( $this, 'field_scanning_time' ),
     116            $this->page,
     117            $section
     118        );
     119
     120        add_settings_field(
     121            $this->parent->OPT_DISABLE_CHECKS,
     122            __( 'Disable Security Checks', 'wpscan' ),
     123            array( $this, 'field_disable_security_checks' ),
    115124            $this->page,
    116125            $section
     
    323332
    324333        echo '</p><br/>';
     334    }
     335    /**
     336     * Disable security checks field
     337     *
     338     * @since 1.15.2
     339     * @access public
     340     * @return string
     341     */
     342    public function field_disable_security_checks() {
     343        $opt     = $this->parent->OPT_DISABLE_CHECKS;
     344
     345        $value   = get_option( $opt, array() );
     346        $checked = $value === '1' ? 'checked' : null;
     347
     348        echo "<input name='{$opt}' type='checkbox' $checked value='1' >";
    325349    }
    326350
  • wpscan/trunk/app/Summary.php

    r2511419 r2540542  
    2626        add_action( 'admin_init', array( $this, 'add_meta_box_summary' ) );
    2727        add_action( 'wp_ajax_wpscan_check_now', array( $this, 'ajax_check_now' ) );
    28         add_action( 'wp_ajax_wpscan_security_check_now', array( $this, 'ajax_security_check_now' ) );
     28
     29        if ( get_option( $this->parent->OPT_DISABLE_CHECKS, array() ) !== '1' ) {
     30          add_action( 'wp_ajax_wpscan_security_check_now', array( $this, 'ajax_security_check_now' ) );
     31        }
     32
    2933        add_action( 'wp_ajax_' . $this->parent->WPSCAN_TRANSIENT_CRON, array( $this, 'ajax_doing_cron' ) );
    3034    }
     
    162166
    163167    /**
    164      * Ajax scurity check now
     168     * Ajax security check now
    165169     *
    166170     * @return void
  • wpscan/trunk/app/ignoreVulnerabilities.php

    r2429586 r2540542  
    128128            $this->list_vulnerabilities_to_ignore( 'themes', $this->parent->get_theme_slug( $name, $details ) );
    129129        }
    130 
    131         foreach ( $this->parent->classes['checks/system']->checks as $id => $data ) {
    132             $this->list_vulnerabilities_to_ignore( 'security-checks', $id );
     130   
     131    if ( get_option( $this->parent->OPT_DISABLE_CHECKS, array() ) !== '1' ) {
     132            foreach ( $this->parent->classes['checks/system']->checks as $id => $data ) {
     133                $this->list_vulnerabilities_to_ignore( 'security-checks', $id );
     134            }
    133135        }
    134136    }
  • wpscan/trunk/assets/css/style.css

    r2452411 r2540542  
    162162.vulnerability-severity {
    163163  float: left;
    164   min-width: 60px;
    165   margin-right: 20px;
    166 }
    167 
    168 .vulnerability-title {
     164  min-width: 100px;
     165}
     166
     167.vulnerability-title .vulnerability-status .vulnerability-link {
    169168  float: left;
    170169}
     
    176175  border-radius: 3px;
    177176  font-size: 11px;
    178   margin: 6px 0px 0px 0px;
    179177  line-height: 19px;
    180   min-width: 60px;
     178  min-width: 100px;
    181179  color: #4e645a;
    182180  background: #c6e1d5;
  • wpscan/trunk/assets/js/download-report.js

    r2529086 r2540542  
    361361    const topTableBorder = is_wordpress_section ? 'WPTableLine' : 'tableLine';
    362362
    363     // name
    364 
     363    // Name
    365364    table.table.body[1].push({
    366365      text: 'Name',
     
    370369    table.table.widths.push(149);
    371370
    372     // version
     371    // Version
    373372    if (!is_security_checks) {
    374373      table.table.body[1].push({
     
    408407        let row = [];
    409408
    410         // Item title
    411         let itemTitle = $(this).find('.plugin-title strong').text().trim();
    412 
     409        // Item name
     410        let itemTitle = is_wordpress_section ? 'WordPress' : $(this).find('.plugin-title strong').text().trim();
     411       
    413412        if ($(this).find('.plugin-title .item-closed').length) {
    414413          itemTitle =
     
    426425
    427426        // Item version
     427        let itemVersion = is_wordpress_section ? $(this).find('#wordpress-version').text().trim() : $(this).find('.plugin-title .item-version span').text().trim();
     428
    428429        if (!is_security_checks) {
    429430          row.push({
    430             text: $(this)
    431               .find('.plugin-title .item-version span')
    432               .text()
    433               .trim(),
     431            text: itemVersion,
    434432            style: 'resTable',
    435433            borderColor,
     
    451449            .each(function () {
    452450              let item = $(this).clone();
    453               let linkText =
    454                 item.find('.vulnerability-severity span').text().trim() + ' - ';
    455               item.find('.vulnerability-severity span').remove();
    456               linkText = linkText + item.text().trim();
    457               linkText = linkText.charAt(0).toUpperCase() + linkText.slice(1);
    458 
    459               col.stack.push({
    460                 text: linkText,
    461                 link: $(this).attr('href'),
    462                 style: 'resTable',
    463                 lineHeight: 2,
    464                 borderColor,
    465               });
     451              let title     = item.find('.vulnerability-title').text().trim();
     452              let status    = item.find('.vulnerability-status').text().trim();
     453              let severity  = item.find('.vulnerability-severity span').text().trim();
     454              let link_text = item.find('.vulnerability-link').text().trim();
     455              let link_href = item.find('.vulnerability-link a').attr('href');
     456
     457              let vulnerability_text = [
     458                { text: title, style: 'resTable' },
     459                { text: status, style: 'resTable' },
     460                { text: severity.charAt(0).toUpperCase() + severity.slice(1), style: 'resTable' },
     461                { text: link_text, link: link_href, style: 'resTable' }
     462              ]
     463
     464              col.stack.push( vulnerability_text );
    466465            });
    467466
     
    479478      });
    480479
    481     // push the table
     480    // Push the table
    482481    is_wordpress_section
    483482      ? wpscanReport.content.push(wordpressTable)
  • wpscan/trunk/readme.txt

    r2529086 r2540542  
    44Requires at least: 3.4
    55Tested up to: 5.6
    6 Stable tag: 1.15.1
     6Stable tag: 1.15.2
    77Requires PHP: 5.5
    88License: GPLv3
     
    9090
    9191== Changelog ==
     92
     93= 1.15.2 =
     94* Improve HTML and PDF report output
     95* Disable security checks setting
     96* Some refactoring
    9297
    9398= 1.15.1 =
  • wpscan/trunk/security-checks/debuglog-files/check.php

    r2511419 r2540542  
    6969
    7070            if ( 200 === $code ) {
    71                 $this->add_vulnerability( __( 'A publicly accessible debug.log file was found in', 'wpscan' ) . " <a href='$url' target='_blank'>$url</a>.", 'high', sanitize_title( $file ), 'https://blog.wpscan.com/2021/03/18/wordpress-debug-log-files.html' );
     71                $this->add_vulnerability( __( 'A publicly accessible debug.log file was found in', 'wpscan' ) . " <a href='$url' target='_blank'>$url</a>", 'high', sanitize_title( $file ), 'https://blog.wpscan.com/2021/03/18/wordpress-debug-log-files.html' );
    7272            }
    7373        }
  • wpscan/trunk/views/report.php

    r2511419 r2540542  
    5151                <th scope="row" class="check-column" style="text-align: center">
    5252                  <?php echo $this->get_status( 'wordpress', get_bloginfo( 'version' ) ) ?></th>
    53                 <td class="plugin-title column-primary">
    54                   <strong>WordPress</strong>
    55                   <span class='item-version'>
    56                     <?php echo sprintf( __( 'Version <span>%s</span>', 'wpscan' ), get_bloginfo( 'version' ) ) ?>
    57                   </span>
     53                <td class="wordpress-title column-primary">
     54                  <strong>WordPress <span id="wordpress-version"><?php echo get_bloginfo( 'version' ) ?></span></strong>
    5855                </td>
    5956                <td class="vulnerabilities">
     
    9491                 
    9592                  <td class="plugin-title column-primary">
    96                     <strong><?php echo esc_html($details['Name']) ?></strong>
     93                    <strong><?php echo esc_html( $details['Name'] ) ?></strong>
    9794                    <span class='item-version'>
    9895                      <?php echo sprintf( __( 'Version <span>%s</span>', 'wpscan' ), esc_html($details['Version']) ) ?>
     
    163160          </div>
    164161
    165           <div class="wpscan-report-section security-checks">
    166             <h3><?php _e('Security Checks', 'wpscan') ?></h3>
    167 
    168             <table class="wp-list-table widefat striped plugins">
    169                 <thead>
    170                     <tr>
    171                         <td scope="col" class="manage-column check-column"></td>
    172                         <th scope="col" class="manage-column column-name column-primary"><?php _e('Name', 'wpscan') ?></th>
    173                         <th scope="col" class="manage-column column-description"><?php _e('Result', 'wpscan') ?></th>
    174                         <th scope="col" class="manage-column column-description"><?php _e('Actions', 'wpscan') ?></th>
    175                     </tr>
    176                 </thead>
    177                 <tbody id="report-themes">
    178                     <?php foreach ( $this->parent->classes['checks/system']->checks as $id => $data ) : ?>
    179                         <tr>
    180                             <th scope="row" class="check-column" style="text-align: center">
    181                               <?php echo $this->get_status('security-checks', $id) ?></th>
    182                             </th>
    183                             <td class="plugin-title column-primary">
    184                                 <strong title="<?php echo esc_attr($data['instance']->description()) ?>">
    185                                   <?php echo esc_html($data['instance']->title()) ?>
    186                                 </strong>
    187                             </td>
    188                             <td class="vulnerabilities">
    189                               <?php $this->parent->classes['checks/system']->list_check_vulnerabilities( $data['instance'] ) ?>
    190                             </td>
    191                             <td class="security-check-actions">
    192                                 <?php $this->parent->classes['checks/system']->list_actions($data['instance']) ?>
    193                                 <span class="spinner"></span>
    194                             </td>
    195                         </tr>
    196                     <?php endforeach; ?>
    197                 </tbody>
    198             </table>
    199           </div>
     162          <?php if ( get_option( $this->parent->OPT_DISABLE_CHECKS, array() ) !== '1' ) { ?>
     163
     164            <div class="wpscan-report-section security-checks">
     165              <h3><?php _e('Security Checks', 'wpscan') ?></h3>
     166
     167              <table class="wp-list-table widefat striped plugins">
     168                  <thead>
     169                      <tr>
     170                          <td scope="col" class="manage-column check-column"></td>
     171                          <th scope="col" class="manage-column column-name column-primary"><?php _e('Name', 'wpscan') ?></th>
     172                          <th scope="col" class="manage-column column-description"><?php _e('Result', 'wpscan') ?></th>
     173                          <th scope="col" class="manage-column column-description"><?php _e('Actions', 'wpscan') ?></th>
     174                      </tr>
     175                  </thead>
     176                  <tbody id="report-themes">
     177                      <?php foreach ( $this->parent->classes['checks/system']->checks as $id => $data ) : ?>
     178                          <tr>
     179                              <th scope="row" class="check-column" style="text-align: center">
     180                                <?php echo $this->get_status('security-checks', $id) ?></th>
     181                              </th>
     182                              <td class="plugin-title column-primary">
     183                                  <strong title="<?php echo esc_attr($data['instance']->description()) ?>">
     184                                    <?php echo esc_html( $data['instance']->title() ) ?>
     185                                  </strong>
     186                              </td>
     187                              <td class="vulnerabilities">
     188                                <?php $this->list_security_check_vulnerabilities( $data['instance'] ) ?>
     189                              </td>
     190                              <td class="security-check-actions">
     191                                  <?php $this->parent->classes['checks/system']->list_actions($data['instance']) ?>
     192                                  <span class="spinner"></span>
     193                              </td>
     194                          </tr>
     195                      <?php endforeach; ?>
     196                  </tbody>
     197              </table>
     198            </div>
     199
     200        <?php } ?>
    200201       
    201202          <?php if ( get_option( $this->parent->OPT_API_TOKEN ) ) { ?>
  • wpscan/trunk/wpscan.php

    r2529086 r2540542  
    44 * Plugin URI:    http://wordpress.org/plugins/wpscan/
    55 * Description:   WPScan WordPress Security Scanner. Scans your system for security vulnerabilities listed in the WPScan Vulnerability Database.
    6  * Version:       1.15.1
     6 * Version:       1.15.2
    77 * Author:        WPScan Team
    88 * Author URI:    https://wpscan.com/
Note: See TracChangeset for help on using the changeset viewer.