---
layout: page
title: Apache SystemDS Security
description: Apache SystemDS security
group: nav-right
---
<!--
{% comment %}
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements.  See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to you under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
{% endcomment %}
-->

<div class="ml-container clear-header">
  <h1>{{ site.data.project.name }} Security</h1>
  <p>
    The Apache Software Foundation takes a very active stance in eliminating security problems with its projects.
    If you have any security concerns regarding Apache SystemDS&trade;, or believe you have uncovered a vulnerability or
    potential threat, contact the Apache Security Team at <a
      href="mailto:security@apache.org?Subject=[SECURITY][SYSTEMDS] My security issue">security@apache.org</a>.
    Include a description of the issue and try to provide steps to reproduce the problem.
    The Apache SystemDS&trade; Community and the Apache Security Team take security issues very seriously and will
    respond.
  </p>
  <p>
    Note the general Apache Security mailing address <a href="mailto:security@apache.org">security@apache.org</a> is
    private and should be used only for undisclosed vulnerabilities.</br>
    <b>Please report any security problems to Apache Security Team before disclosing it publicly.</b>
  </p>
  <p>
    The <span class="caps">ASF</span> Security team maintains a page with a description of how vulnerabilities and
    potential threats are handled. Refer to their <a href="http://www.apache.org/security/">security page</a> for more
    information.
  </p>
</div>
