Merge branch '2.4' of github.com:MISP/MISP into decaying

pull/5032/head
mokaddem 2019-08-27 08:20:42 +02:00
commit fd30141cdf
No known key found for this signature in database
GPG Key ID: 164C473F627A06FA
21 changed files with 271 additions and 64 deletions

View File

@ -24,6 +24,7 @@ before_install:
- export PATH="$HOME/.local/bin:$PATH"
install:
- date
- sudo apt-get -y update
# Travis lacks entropy.
- sudo apt-get -y install haveged

2
PyMISP

@ -1 +1 @@
Subproject commit 101ec5f9ed6d6871b99e1cb0e27d04ebe14f5a44
Subproject commit b802e202e2da81a96b6ef660dff1115a45135e0e

View File

@ -103,6 +103,7 @@ class ACLComponent extends Component
'acceptDelegation' => array('perm_add'),
'delegateEvent' => array('perm_delegate'),
'deleteDelegation' => array('perm_add'),
'index' => array('*'),
'view' => array('*'),
),
'events' => array(

View File

@ -53,15 +53,20 @@ class EventDelegationsController extends AppController
if (empty($this->request->data['EventDelegation'])) {
$this->request->data = array('EventDelegation' => $this->request->data);
}
if (empty($this->request->data['EventDelegation']['distribution'])) {
$this->request->data['EventDelegation']['distribution'] = 0;
}
if ($this->request->data['EventDelegation']['distribution'] != 4) {
$this->request->data['EventDelegation']['sharing_group_id'] = '0';
}
$this->request->data['EventDelegation']['event_id'] = $event['Event']['id'];
$this->request->data['EventDelegation']['requester_org_id'] = $this->Auth->user('org_id');
$org_id = $this->Toolbox->findIdByUuid($this->EventDelegation->Event->Org, $this->request->data['EventDelegation']['org_id']);
$this->request->data['EventDelegation']['org_id'] = $org_id;
$this->EventDelegation->create();
$this->EventDelegation->save($this->request->data['EventDelegation']);
$org = $this->EventDelegation->Event->Org->find('first', array(
'conditions' => array('id' => $this->request->data['EventDelegation']['org_id']),
'conditions' => array('id' => $org_id),
'recursive' => -1,
'fields' => array('name')
));
@ -179,4 +184,60 @@ class EventDelegationsController extends AppController
$this->render('ajax/delete_delegation');
}
}
public function index()
{
$context = 'pending';
if ($this->request->is('post') && !empty($this->request->data['context'])) {
$context = $this->request->data['context'];
} else if (!empty($this->params['named']['context'])) {
$context = $this->params['named']['context'];
}
if ($context === 'pending') {
$conditions = array('EventDelegation.org_id' => $this->Auth->user('org_id'));
} else if ($context === 'issued') {
$conditions = array('EventDelegation.requester_org_id' => $this->Auth->user('org_id'));
} else {
throw new InvalidArgumentException('Invalid context. Expected values: pending or issued.');
}
if (!empty($this->params['named']['value'])) {
$temp = array();
$temp['lower(EventDelegation.message) like'] = '%' . strtolower(trim($this->params['named']['value'])) . '%';
$temp['lower(Event.info) like'] = '%' . strtolower(trim($this->params['named']['value'])) . '%';
$temp['lower(Org.name) like'] = '%' . strtolower(trim($this->params['named']['value'])) . '%';
$temp['lower(RequesterOrg.name) like'] = '%' . strtolower(trim($this->params['named']['value'])) . '%';
$conditions['AND'][] = array('OR' => $temp);
}
$org_fields = array('id', 'name', 'uuid');
$event_fields = array('id', 'info', 'uuid', 'analysis', 'distribution', 'threat_level_id', 'date', 'attribute_count');
$params = array(
'conditions' => $conditions,
'recursive' => -1,
'contain' => array(
'Event' => array('fields' => $event_fields),
'Org' => array('fields' => $org_fields),
'RequesterOrg' => array('fields' => $org_fields)
)
);
$this->paginate = array_merge($this->paginate, $params);
$delegation_requests = $this->paginate();
foreach ($delegation_requests as $k => $v) {
if ($v['EventDelegation']['distribution'] == -1) {
unset($delegation_requests[$k]['EventDelegation']['distribution']);
}
if ($v['EventDelegation']['sharing_group_id'] == 0) {
unset($delegation_requests[$k]['EventDelegation']['sharing_group_id']);
}
unset($v['EventDelegation']);
$delegation_requests[$k]['EventDelegation'] = array_merge($delegation_requests[$k]['EventDelegation'], $v);
$delegation_requests[$k] = array('EventDelegation' => $delegation_requests[$k]['EventDelegation']);
}
if ($this->_isRest()) {
return $this->RestResponse->viewData($delegation_requests, $this->response->type());
} else {
$this->set('context', $context);
$this->set('delegation_requests', $delegation_requests);
$this->set('passedArgs', json_encode($this->passedArgs, true));
}
}
}

View File

@ -2331,8 +2331,6 @@ class EventsController extends AppController
throw new NotFoundException(__('Invalid event'));
}
$id = $temp['Event']['id'];
} elseif (!is_numeric($id)) {
throw new NotFoundException(__('Invalid event'));
}
if ($this->request->is('post') || $this->request->is('put') || $this->request->is('delete')) {
if (isset($this->request->data['id'])) {

View File

@ -902,7 +902,7 @@ class FeedsController extends AppController
if ($this->_isRest()) {
return $this->RestResponse->saveSuccessResponse('Feed', 'cacheFeed', false, $this->response->type(), $message);
} else {
$this->Flash->error($message);
$this->Flash->info($message);
$this->redirect(array('controller' => 'feeds', 'action' => 'index'));
}
}

View File

@ -2017,7 +2017,7 @@ class Event extends AppModel
$fieldsAtt = array('Attribute.id', 'Attribute.type', 'Attribute.category', 'Attribute.value', 'Attribute.to_ids', 'Attribute.uuid', 'Attribute.event_id', 'Attribute.distribution', 'Attribute.timestamp', 'Attribute.comment', 'Attribute.sharing_group_id', 'Attribute.deleted', 'Attribute.disable_correlation', 'Attribute.object_id', 'Attribute.object_relation');
$fieldsObj = array('*');
$fieldsShadowAtt = array('ShadowAttribute.id', 'ShadowAttribute.type', 'ShadowAttribute.category', 'ShadowAttribute.value', 'ShadowAttribute.to_ids', 'ShadowAttribute.uuid', 'ShadowAttribute.event_uuid', 'ShadowAttribute.event_id', 'ShadowAttribute.old_id', 'ShadowAttribute.comment', 'ShadowAttribute.org_id', 'ShadowAttribute.proposal_to_delete', 'ShadowAttribute.timestamp');
$fieldsOrg = array('id', 'name', 'uuid');
$fieldsOrg = array('id', 'name', 'uuid', 'local');
$fieldsServer = array('id', 'url', 'name');
if (!$options['includeAllTags']) {
$tagConditions = array('exportable' => 1);
@ -3132,13 +3132,6 @@ class Event extends AppModel
'conditions' => array('disabled' => 0, 'User.org_id' => $event['Event']['orgc_id']),
'recursive' => -1
));
if (empty($temp)) {
$temp = $this->User->find('all', array(
'fields' => array('email', 'gpgkey', 'certif_public', 'contactalert', 'id', 'org_id'),
'conditions' => array('disabled' => 0, 'User.org_id' => $event['Event']['org_id']),
'recursive' => -1
));
}
foreach ($temp as $tempElement) {
if ($tempElement['User']['contactalert'] || $tempElement['User']['id'] == $event['Event']['user_id']) {
array_push($orgMembers, $tempElement);
@ -3146,8 +3139,13 @@ class Event extends AppModel
}
} else {
$temp = $this->User->find('first', array(
'conditions' => array('User.id' => $event['Event']['user_id'], 'User.disabled' => 0),
'conditions' => array(
'User.id' => $event['Event']['user_id'],
'User.disabled' => 0,
'User.org_id' => $event['Event']
),
'fields' => array('User.email', 'User.gpgkey', 'User.certif_public'),
'recursive' => -1
));
if (!empty($temp)) {
$orgMembers = array(0 => $temp);
@ -3156,12 +3154,12 @@ class Event extends AppModel
if (empty($orgMembers)) {
return false;
}
$temp = $this->__buildContactEventEmailBody($user, $message, $event, $targetUser, $id);
$bodyevent = $temp[0];
$body = $temp[1];
$result = true;
$tplColorString = !empty(Configure::read('MISP.email_subject_TLP_string')) ? Configure::read('MISP.email_subject_TLP_string') : "TLP Amber";
foreach ($orgMembers as &$reporter) {
foreach ($orgMembers as $reporter) {
$temp = $this->__buildContactEventEmailBody($user, $message, $event, $reporter, $id);
$bodyevent = $temp[0];
$body = $temp[1];
$result = true;
$tplColorString = !empty(Configure::read('MISP.email_subject_TLP_string')) ? Configure::read('MISP.email_subject_TLP_string') : "TLP Amber";
$subject = "[" . Configure::read('MISP.org') . " MISP] Need info about event " . $id . " - ".$tplColorString;
$result = $this->User->sendEmail($reporter, $bodyevent, $body, $subject, $user) && $result;
}
@ -3204,7 +3202,7 @@ class Event extends AppModel
$bodyevent .= 'Analysis : ' . $event['Event']['analysis'] . "\n";
$userModel = ClassRegistry::init('User');
$targetUser = $userModel->getAuthUser($orgMembers[0]['User']['id']);
$targetUser = $userModel->getAuthUser($targetUser['User']['id']);
$sgModel = ClassRegistry::init('SharingGroup');
$sgs = $sgModel->fetchAllAuthorised($targetUser, false);

View File

@ -61,12 +61,12 @@
</tr>
<?php foreach ($events as $event): ?>
<tr <?php if ($event['Event']['distribution'] == 0) echo 'class = "privateRed"'?>>
<tr <?php if ($event['Event']['distribution'] == 0) echo 'class = "privateRed"'?> id="event_<?php echo h($event['Event']['id']);?>">
<?php
if ($isSiteAdmin || ($event['Event']['orgc_id'] == $me['org_id'])):
?>
<td style="width:10px;" data-id="<?php echo h($event['Event']['id']); ?>">
<input class="select" type="checkbox" data-id="<?php echo $event['Event']['id'];?>" />
<input id="<?php echo h($event['Event']['id']); ?>" class="select" type="checkbox" data-id="<?php echo h($event['Event']['id']);?>" />
</td>
<?php
else:
@ -240,10 +240,20 @@
<?php endforeach; ?>
</table>
<script type="text/javascript">
var lastSelected = false;
$(document).ready(function() {
$('.select').on('change', function() {
listCheckboxesChecked();
});
$('.select').click(function(e) {
if ($(this).is(':checked')) {
if (e.shiftKey) {
selectAllInbetween(lastSelected, this.id);
}
lastSelected = this.id;
}
attributeListAnyAttributeCheckBoxesChecked();
});
$('.distributionNetworkToggle').each(function() {
$(this).distributionNetwork({

View File

@ -19,12 +19,12 @@ if ($object['value'] == 'MERGE') debug($object);
$tr_class .= ' row_' . h($k);
}
?>
<tr id = "Attribute_<?php echo h($object['uuid']); ?>_tr" class="<?php echo $tr_class; ?>" tabindex="0">
<tr id="Attribute_<?php echo h($object['uuid']); ?>_tr" class="<?php echo $tr_class; ?>" tabindex="0">
<td class="short">
<?php echo date('Y-m-d', $object['timestamp']); ?>
</td>
<td class="short">
<div id = "Attribute_<?php echo $object['uuid']; ?>_category_solid" class="inline-field-solid">
<div id="Attribute_<?php echo $object['uuid']; ?>_category_solid" class="inline-field-solid">
<?php echo h($object['category']); ?>
</div>
</td>
@ -37,12 +37,12 @@ if ($object['value'] == 'MERGE') debug($object);
endif;
?>
<div></div>
<div id = "Attribute_<?php echo $object['uuid']; ?>_type_solid" class="inline-field-solid">
<div id="Attribute_<?php echo $object['uuid']; ?>_type_solid" class="inline-field-solid">
<?php echo h($object['type']); ?>
</div>
</td>
<td id="Attribute_<?php echo h($object['uuid']); ?>_container" class="showspaces limitedWidth shortish">
<div id = "Attribute_<?php echo $object['uuid']; ?>_value_solid" class="inline-field-solid">
<div id="Attribute_<?php echo $object['uuid']; ?>_value_solid" class="inline-field-solid">
<span <?php if (Configure::read('Plugin.Enrichment_hover_enable') && isset($modules) && isset($modules['hover_type'][$object['type']])) echo 'class="eventViewAttributeHover" data-object-type="Attribute" data-object-id="' . h($object['uuid']) . '"'?>>
<?php
echo $this->element('/Events/View/value_field', array('object' => $object, 'linkClass' => $linkClass));
@ -72,7 +72,7 @@ if ($object['value'] == 'MERGE') debug($object);
</div>
</td>
<td class="showspaces bitwider">
<div id = "Attribute_<?php echo $object['uuid']; ?>_comment_solid" class="inline-field-solid">
<div id="Attribute_<?php echo $object['uuid']; ?>_comment_solid" class="inline-field-solid">
<?php echo nl2br(h($object['comment'])); ?>&nbsp;
</div>
</td>
@ -83,7 +83,7 @@ if ($object['value'] == 'MERGE') debug($object);
&nbsp;
</td>
<td class="short">
<div id = "Attribute_<?php echo $object['uuid']; ?>_to_ids_solid" class="inline-field-solid");">
<div id="Attribute_<?php echo $object['uuid']; ?>_to_ids_solid" class="inline-field-solid">
<?php echo $object['to_ids'] ? __('Yes') : __('No'); ?>
</div>
</td>

View File

@ -1,12 +1,20 @@
<?php
$url_data = Hash::extract($row, $field['data_path']);
$data_elements = Hash::extract($row, $field['data_path']);
$links = array();
foreach ($url_data as $url) {
foreach ($data_elements as $data) {
if (strpos($field['url'], '%s') !== false) {
$url = sprintf(
$field['url'],
$data
);
} else {
$url = $data;
}
$links[] = sprintf(
'<a href="%s" title="%s">%s</a>',
h($url['url']),
h($url['name']),
h($url['name'])
h($url),
empty($field['title']) ? h($data) : h($field['title']),
h($data)
);
}
echo implode('<br />', $links);

View File

@ -0,0 +1,9 @@
<?php
$org = Hash::extract($row, $field['data_path']);
echo sprintf(
'<a href="%s/organisations/view/%s">%s</a>',
$baseurl,
h($org['id']),
h($org['name'])
);
?>

View File

@ -191,11 +191,13 @@
'message' => __('Are you sure you wish to republish the current event to the Kafka topic?')
));
}
echo $this->element('/genericElements/SideMenu/side_menu_link', array(
'element_id' => 'contact',
'url' => '/events/contact/' . $event['Event']['id'],
'text' => __('Contact Reporter')
));
if (!empty($event['Orgc']['local'])) {
echo $this->element('/genericElements/SideMenu/side_menu_link', array(
'element_id' => 'contact',
'url' => '/events/contact/' . $event['Event']['id'],
'text' => __('Contact Reporter')
));
}
echo $this->element('/genericElements/SideMenu/side_menu_link', array(
'onClick' => array(
'function' => 'getPopup',
@ -302,6 +304,11 @@
'url' => '/events/proposalEventIndex',
'text' => __('Events with proposals')
));
echo $this->element('/genericElements/SideMenu/side_menu_link', array(
'element_id' => 'viewDelegations',
'url' => '/event_delegations/index/context:pending',
'text' => __('View delegation requests')
));
echo $this->element('/genericElements/SideMenu/side_menu_divider');
echo $this->element('/genericElements/SideMenu/side_menu_link', array(
'url' => '/events/export',

View File

@ -42,6 +42,10 @@
'text' => __('Events with proposals'),
'url' => '/events/proposalEventIndex'
),
array(
'url' => '/event_delegations/index/context:pending',
'text' => __('View delegation requests')
),
array(
'type' => 'separator'
),

View File

@ -0,0 +1,108 @@
<?php
/*
* echo $this->element('/genericElements/IndexTable/index_table', array(
* 'top_bar' => (
* // search/filter bar information compliant with ListTopBar
* ),
* 'data' => array(
// the actual data to be used
* ),
* 'fields' => array(
* // field list with information for the paginator
* ),
* 'title' => optional title,
* 'description' => optional description
* ));
*
*/
echo '<div class="index">';
echo $this->element('/genericElements/IndexTable/index_table', array(
'data' => array(
'data' => $delegation_requests,
'top_bar' => array(
'children' => array(
array(
'type' => 'simple',
'children' => array(
array(
'active' => $context === 'pending',
'url' => $baseurl . '/event_delegations/index/context:pending',
'text' => __('Pending'),
),
array(
'active' => $context === 'issued',
'url' => $baseurl . '/event_delegations/index/context:issued',
'text' => __('Issued'),
)
),
),
array(
'type' => 'search',
'button' => __('Filter'),
'placeholder' => __('Enter value to search'),
'data' => '',
'searchKey' => 'value'
)
)
),
'fields' => array(
array(
'name' => __('Id'),
'sort' => 'EventDelegation.id',
'class' => 'short',
'data_path' => 'EventDelegation.id',
),
array(
'name' => __('Requester'),
'class' => 'short',
'element' => 'org',
'sort' => 'EventDelegation.requester_org_id',
'data_path' => 'EventDelegation.RequesterOrg'
),
array(
'name' => __('Recipient'),
'class' => 'short',
'element' => 'org',
'sort' => 'EventDelegation.org_id',
'data_path' => 'EventDelegation.Org'
),
array(
'name' => __('Event id'),
'sort' => 'EventDelegation.event_id',
'element' => 'links',
'class' => 'short',
'data_path' => 'EventDelegation.event_id',
'url' => $baseurl . '/events/view/%s'
),
array(
'name' => __('Event info'),
'data_path' => 'EventDelegation.Event.info'
),
array(
'name' => __('Message'),
'data_path' => 'EventDelegation.message'
)
),
'title' => __('Delegation index'),
'description' => __('')
)
));
echo '</div>';
echo $this->element('/genericElements/SideMenu/side_menu', array('menuList' => 'event-collection', 'menuItem' => 'viewDelegations'));
?>
<script type="text/javascript">
var passedArgsArray = <?php echo $passedArgs; ?>;
if (passedArgsArray['context'] === undefined) {
passedArgsArray['context'] = 'pending';
}
$(document).ready(function() {
$('#quickFilterButton').click(function() {
runIndexQuickFilter('/context:' + passedArgsArray['context']);
});
$('#quickFilterField').on('keypress', function (e) {
if(e.which === 13) {
runIndexQuickFilter('/context:' + passedArgsArray['context']);
}
});
});
</script>

View File

@ -2,7 +2,7 @@
<h2><?php echo __('Automation');?></h2>
<p><?php echo __('Automation functionality is designed to automatically feed other tools and systems with the data in your MISP repository.
To to make this functionality available for automated tools an authentication key is used.');?>
<br /><?php echo __('You can use the <a href="servers/rest">ReST client</a> to test your API queries against your MISP and export the resulting tuned queries as curl or python scripts.');?>
<br /><?php echo __('You can use the <a href="/servers/rest">REST client</a> to test your API queries against your MISP and export the resulting tuned queries as curl or python scripts.');?>
<strong><?php echo __('Make sure you keep your API key secret as it gives access to the all of the data that you normally have access to in MISP.');?></strong>
<?php echo __('To view the old MISP automation page, click <a href="automation/1">here</a>.');?>
</p>

View File

@ -102,7 +102,6 @@
<script type="text/javascript">
// tooltips
$(document).ready(function () {
//loadEventTags("<?php echo $event['Event']['id']; ?>");
$("th, td, dt, div, span, li").tooltip({
'placement': 'top',
'container' : 'body',

View File

@ -120,7 +120,7 @@
"id": "5",
"name": "blockrules of rules.emergingthreats.net",
"provider": "rules.emergingthreats.net",
"url": "http://rules.emergingthreats.net/blockrules/compromised-ips.txt",
"url": "https://rules.emergingthreats.net/blockrules/compromised-ips.txt",
"rules": "{\"tags\":{\"OR\":[],\"NOT\":[]},\"orgs\":{\"OR\":[],\"NOT\":[]}}",
"enabled": true,
"distribution": "0",
@ -252,7 +252,7 @@
"id": "10",
"name": "cybercrime-tracker.net - all",
"provider": "cybercrime-tracker.net",
"url": "http://cybercrime-tracker.net/all.php",
"url": "https://cybercrime-tracker.net/all.php",
"rules": "",
"enabled": true,
"distribution": "0",
@ -285,7 +285,7 @@
"id": "11",
"name": "Phishtank online valid phishing",
"provider": "Phishtank",
"url": "http://data.phishtank.com/data/online-valid.csv",
"url": "https://data.phishtank.com/data/online-valid.csv",
"rules": "",
"enabled": true,
"distribution": "0",
@ -342,8 +342,8 @@
"Feed": {
"id": "13",
"name": "ip-filter.blf - labs.snort.org",
"provider": "http://labs.snort.org",
"url": "http://labs.snort.org/feeds/ip-filter.blf",
"provider": "https://labs.snort.org",
"url": "https://labs.snort.org/feeds/ip-filter.blf",
"rules": "{\"tags\":{\"OR\":[],\"NOT\":[]},\"orgs\":{\"OR\":[],\"NOT\":[]}}",
"enabled": true,
"distribution": "0",
@ -705,7 +705,7 @@
"id": "36",
"name": "IPs from High-Confidence DGA-Based C&Cs Actively Resolving",
"provider": "osint.bambenekconsulting.com",
"url": "http://osint.bambenekconsulting.com/feeds/c2-ipmasterlist-high.txt",
"url": "https://osint.bambenekconsulting.com/feeds/c2-ipmasterlist-high.txt",
"rules": "{\"tags\":{\"OR\":[],\"NOT\":[]},\"orgs\":{\"OR\":[],\"NOT\":[]}}",
"enabled": true,
"distribution": "3",
@ -737,7 +737,7 @@
"id": "37",
"name": "Domains from High-Confidence DGA-based C&C Domains Actively Resolving",
"provider": "osint.bambenekconsulting.com",
"url": "http://osint.bambenekconsulting.com/feeds/c2-dommasterlist-high.txt",
"url": "https://osint.bambenekconsulting.com/feeds/c2-dommasterlist-high.txt",
"rules": "",
"enabled": true,
"distribution": "3",
@ -769,7 +769,7 @@
"id": "38",
"name": "ci-badguys.txt",
"provider": "cinsscore.com",
"url": "http://cinsscore.com/list/ci-badguys.txt",
"url": "https://cinsscore.com/list/ci-badguys.txt",
"rules": "",
"enabled": true,
"distribution": "3",
@ -801,7 +801,7 @@
"id": "39",
"name": "alienvault reputation generic",
"provider": ".alienvault.com",
"url": "http://reputation.alienvault.com/reputation.generic",
"url": "https://reputation.alienvault.com/reputation.generic",
"rules": "{\"tags\":{\"OR\":[],\"NOT\":[]},\"orgs\":{\"OR\":[],\"NOT\":[]}}",
"enabled": true,
"distribution": "3",
@ -1137,7 +1137,7 @@
"id": "57",
"name": "http://cybercrime-tracker.net",
"provider": "http://cybercrime-tracker.net hashlist",
"url": "http://cybercrime-tracker.net/ccamlist.php",
"url": "https://cybercrime-tracker.net/ccamlist.php",
"rules": "{\"tags\":{\"OR\":[],\"NOT\":[]},\"orgs\":{\"OR\":[],\"NOT\":[]}}",
"enabled": true,
"distribution": "3",
@ -1162,7 +1162,7 @@
"id": "58",
"name": "http://cybercrime-tracker.net",
"provider": "http://cybercrime-tracker.net gatelist",
"url": "http://cybercrime-tracker.net/ccamgate.php",
"url": "https://cybercrime-tracker.net/ccamgate.php",
"rules": "",
"enabled": true,
"distribution": "3",
@ -1237,7 +1237,7 @@
"id": "61",
"name": "conficker all domains generated",
"provider": "cert.at",
"url": "http://www.cert.at/static/downloads/data/conficker/all_domains.txt",
"url": "https://www.cert.at/static/downloads/data/conficker/all_domains.txt",
"rules": "",
"enabled": true,
"distribution": "3",
@ -1395,7 +1395,7 @@
"id": "70",
"name": "CyberCure - IP Feed",
"provider": "www.cybercure.ai",
"url": "http://api.cybercure.ai/feed/get_ips?type=csv",
"url": "https://api.cybercure.ai/feed/get_ips?type=csv",
"rules": "",
"enabled": false,
"distribution": "3",
@ -1420,7 +1420,7 @@
"id": "71",
"name": "CyberCure - Blocked URL Feed",
"provider": "www.cybercure.ai",
"url": "http://api.cybercure.ai/feed/get_url?type=csv",
"url": "https://api.cybercure.ai/feed/get_url?type=csv",
"rules": "",
"enabled": true,
"distribution": "3",
@ -1445,7 +1445,7 @@
"id": "72",
"name": "CyberCure - Hash Feed",
"provider": "www.cybercure.ai",
"url": "http://api.cybercure.ai/feed/get_hash?type=csv",
"url": "https://api.cybercure.ai/feed/get_hash?type=csv",
"rules": "",
"enabled": false,
"distribution": "3",
@ -1602,7 +1602,7 @@
"id": "89",
"name": "Benkow.cc RAT",
"provider": "benkow.cc",
"url": "http://benkow.cc/export_rat.php",
"url": "https://benkow.cc/export_rat.php",
"rules": "{\"tags\":{\"OR\":[],\"NOT\":[]},\"orgs\":{\"OR\":[],\"NOT\":[]}}",
"enabled": false,
"distribution": "0",
@ -1631,7 +1631,7 @@
"id": "90",
"name": "Panels Tracker",
"provider": "Benkow.cc",
"url": "http://benkow.cc/export.php",
"url": "https://benkow.cc/export.php",
"rules": "{\"tags\":{\"OR\":[],\"NOT\":[]},\"orgs\":{\"OR\":[],\"NOT\":[]}}",
"enabled": false,
"distribution": "3",

@ -1 +1 @@
Subproject commit d5f37d3dc23c8acfe080e7ff04ca5979f3e64625
Subproject commit 30204266a0ae9d7a9556853cd8f02096396818a0

View File

@ -771,6 +771,7 @@ a.proposal_link_red:hover {
display: inline-block;
margin-right:2px;
word-wrap:break-word;
white-space: normal;
}
.black-white {

View File

@ -3531,8 +3531,10 @@ function attributeHoverPlacement(element) {
$('body').on('click', function (e) {
$('[data-toggle=popover]').each(function () {
// hide any open popovers when the anywhere else in the body is clicked
if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
$('#' + currentPopover).popover('destroy');
if (typeof currentPopover !== 'undefined') {
if (!$(this).is(e.target) && $(this).has(e.target).length === 0 && $('.popover').has(e.target).length === 0) {
$('#' + currentPopover).popover('destroy');
}
}
});
});
@ -3750,7 +3752,7 @@ function selectAllInbetween(last, current) {
from = to;
to = temp;
}
$('.select_proposal, .select_attribute').each(function () {
$('.select_proposal, .select_attribute, .select').each(function (e) {
if ($('#' + this.id).parent().parent().index() >= from && $('#' + this.id).parent().parent().index() <= to) {
$(this).prop('checked', true);
}

View File

@ -1,11 +1,11 @@
# INSTALLATION INSTRUCTIONS
## for Ubuntu 18.04.2-server
## for Ubuntu 18.04.3-server
### -1/ Installer and Manual install instructions
Make sure you are reading the parsed version of this Document. When in doubt [click here](https://misp.github.io/MISP/INSTALL.ubuntu1804/).
To install MISP on a fresh Ubuntu install all you need to do is:
To install MISP on a fresh Ubuntu 18.04, all you need to do is the following:
```bash
# Please check the installer options first to make the best choice for your install